2015年2月5日木曜日

PDFにおけるCMYKのDCTDecode(JPEG)の色反転について

反転するケースと反転しないケースがあり、反転しない場合と反転する場合の条件とIllustratorにおけるCMYKJpegの扱いについてまとめます。


  • 反転するケースと反転しないケースの別について
基本的には/Type = Image, /Filter = DCTDecodeで色空間がCMYKの場合、各値が「0」を100%の塗り、「255」を0%の塗りとして扱います。
→なのでPDFから該当イメージのデータを引っこ抜くとポジネガ反転したようなJPEGになります。

次に、反転してないCMYKJPEGが貼りこんであるにもかかわらず、Acrobat表示が反転してないケースのコントロールは、イメージオブジェクトの/Decodeエントリでコントロールされます。
Decodeエントリは各色要素の[最小値0, 最大値0, 最小値1, 最大値1, ...... 最小値N, 最大値N]という設定となっています。
CMYKデータの場合、Nは4なのでDecodeエントリの配列には8つの値が設定されている事になります。

もし、Decodeエントリがない場合は、最小値 => 255, 最大値 => 0という扱いになりますが、反転してないCMYKJPEGの場合、Decodeエントリは大抵以下のように設定されています。

/Decode [1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0]

上記の通り、最小値 > 最大値なので各要素の値を反転するという意味になります。
そのため、ポジネガ反転してないCMYKのJPEGでも正しく表示されるということになります。

※FlateDecodeの場合は、0が素直なのですが、CMYKのJPEGだけそんな扱いになります。
  • Illustratorでの扱いについて
Illustratorでは、PDFファイルをオープンする際、Decodeエントリなんて気にせずに、CMYKのJPEGは必ずポジネガ反転しているという前提でオープンします。
なので、Decodeエントリで反転しているようなCMYKJPEGデータが含まれている場合、Illustrator上では正しく表示されません。

まとめ

PDFの出力するツールを実装している人は、生成したPDFファイルをIllustratorで編集するかどうかに留意しましょう。
外部で生成されたCMYKのJPEGファイルを貼りこむ場合、後々Illustratorで編集する必要がある場合、事前にポジネガ反転したCMYKのJPEGを裏で生成し、それを使ってPDFに貼りこみましょう。