質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

1803閲覧

JavaでCMYK形式画像をRGB形式画像に変換したいです。(その際、ICCプロファイル無しで独自計算で…)

Sinmai

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2018/03/30 04:12

新米プログラマーです。

前提・実現したいこと

Javaで画像の色空間の変換を行いたいです。
cmykの画像をRGBに変換したいです。
(その際、ICCプロファイルを使わずに独自で計算します。)

色々調べたのですが、画像からRGBの値を引っ張ってきて
色々処理する例は多いのですが、cmykの例がございません。

参考にしたwebサイト

Java

1BufferedImage write =new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

ちなみにcmykの画像を ↑上記のBufferedImage.TYPE_INT_RGBで取得すると、
非常に明るすぎる色の値が取得されます。

第1段階の質問として、
Javaでcmyk形式画像のcmykの値を引っ張ってくる方法を教えていただけないでしょうか?
すみませんが、よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

JREはJava9です。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

印刷とか出版関係に詳しいわけでもなんでもないので、単に検索してみた結果をご紹介するくらいしかできませんが・・・

「java cmyk image load」で検索してみるといくつかヒットしました。以下はその一部です。

https://dukesoftware00.blogspot.jp/2011/10/java.html
https://stackoverflow.com/questions/8118712/java-cmyk-to-rgb-with-profile-output-is-too-dark/12132556#12132556

ICCプロファイルについての質問者さんの意図とこの検索結果の中に出てくる情報がマッチするかどうか判断できませんが、少なくとも質問に挙げておられる参考ページは色空間についての言及がほぼないので、それよりはつっこんだ内容が書かれてるページが見つかる気がします。
stackoverflowの方には(目的に適合するかどうかは別として)CMYKのjpegファイルをロードするサンプルコードが載ってました。えらく長いですw;

投稿2018/03/30 05:27

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sinmai

2018/03/30 07:19

回答ありがとうございます。参考ページ実はもうすでに拝見しました。 どちらもICCプロファイルを活用したアプローチなんですよね…。 http://nodamushi.hatenablog.com/entry/20111012/1318436587 のページの様な方法で、独自計算で変換する方法を探っています。
KSwordOfHaste

2018/03/30 07:50 編集

挙げておられるページはあくまでImageIOがサポートしている形式の画像ファイルを読み込む前提で書かれてますよね。JREにあるImageIOはCMYKをサポートしていないので、例えばJPEGの画像を読み込むならそもそもImageIOとは別のデコーダーをどこからか見つけて用いる必要があるだろうと思います。JPEGについていえば自前でデコードするような処理を書くのはあまりに迂遠すぎると思うので。 --- スミマセン上のコメントは間違いみたいです。回答に挙げたstackoverflowのコードをみるに、JREの範囲内でjpegの画像ファイルから画素データをWritableRasterとして取り出すことはできて、そこで読み込んだCMYK形式の画素値を自前で変換すればよいという雰囲気に思えますね。
Sinmai

2018/03/30 07:48

ご意見ありがとうございます。すみません質問内容をもっとシンプルにしてみました。 https://teratail.com/questions/119635 ↑こちらのアプローチ方法はご存知でしょうか? すみませんが、よろしくお願いいたします。
KSwordOfHaste

2018/03/30 07:54

画素値のカラースペース間の変換はCIEXYZを介して相互変換する機能が設けられているということなのですが、まずは画像をデコードする必要があってそれはどの色空間かにかかわらずrasterを読む方法がstackoverflowにあるからそれが参考になるのかなと思いました。rasterさえ読めればあとはその画素データを自前で変換することもできるのではないでしょうか?
Sinmai

2018/03/30 08:03

ありがとうございます。すみませんが、その読み込んだrasterを変換する方法をご教示いただけないでしょうか…。よろしくお願いいたします。
KSwordOfHaste

2018/03/30 08:17

残念ながら自分は「rasterの中から色要素(component)を取り出してそれをしかるべき空間から別の空間へ変換する」という程度の考えしかなく、具体的にCMYKの画像ファイルのrasterがどのような色要素フォーマットで格納されているか自体を知りません。その具体的方法の一例がstackoverflowのコードだと解釈していました。 もしICCプロファイルを用いて変換するコード例ではNGということなら、それを用いずに変換可能か、可能ならどう変換すべきか、rasterにどのような形式で入っているかといったことを詳しく調べないと自分にはわかりません><
guest

0

BufferedImage のリファレンス を見る限り、4chの色空間はARGB(ないしABGR)か、CUSTOMかしか定義が無いようですね。

色空間の変換は自前でやる、のであれば、
A⇒C
R⇒M
G⇒Y
B⇒K
として取得してしまって、RGB空間へ変換してやる、というやり方が通用するかどうか、というところでしょうね。
ズバリな回答でなくて申し訳ないです。。。

投稿2018/03/30 04:23

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sinmai

2018/03/30 04:44

早速のご回答ありがとうございます。非常に参考になります。 ですが質問自体はまだ、明確な答えが出るまで開いておきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問