このエントリー
をはてなブックマークに追加
published on in ImageMagick
tags: ICC JPEG

ImageMagick で ICC プロファイルを扱う #3 コマンド解説

はじめに

このエントリの続きです。

ImageMagick で JPEG に埋め込まれた ICC プロファイルを操作する

JPEG ファイルは ICC プロファイルを埋め込めます。ImageMagick でその ICC プロファイルを操作するコマンドについて整理しました。

存在チェック (check)

ICC プロファイルが入っている場合

% identify -format "%[profiles]\n" test.jpg
icc

ICC プロファイルが入っていない場合

  • メタデータが何も入っていない場合
% identify -format "%[profiles]\n" test2.jpg
identify: unknown image property "%[profiles]" @ warning/property.c/InterpretImageProperties/3888.
  • Exif や XMP が入っている場合
% identify -format "%[profiles]\n" test2.jpg
exif,xmp

抽出 (extract)

% convert test.jpg test.icc
%

削除 (delete)

% convert test.jpg +profile icc output.jpg
%

挿入 (insert)

% identify -format "%[profiles]" test.jpg
identify: unknown image property "%[profiles]" @ warning/property.c/InterpretImageProperties/3888.
% convert test.jpg -profile sRGB.icc output.jpg
%

↓ ↓ ↓

注意点: CMYK プロファイル

尚、この挿入ケースのように、ICC プロファイルが入っていない RGB (YCbCr)JPEG に対しては、 CMYK の ICC プロファイルも適用すると、RGB JPEG のまま CMYK の ICC プロファイルが埋め込まれる、矛盾した JPEG ファイルが生成されるので注意が必要です。

% identify rgb.jpg
rgb.jpg JPEG 400x400 400x400+0+0 8-bit sRGB 5217B 0.000u 0:00.009
% identify -verbose rgb.jpg | grep -i profile
%
% convert rgb.jpg -profile JapanColor2001Coated.icc cmyk.jpg
% identify cmyk.jpg
cmyk.jpg JPEG 400x400 400x400+0+0 8-bit sRGB 562549B 0.000u 0:00.000

参考までに、ImageMagick の sRGB 表示は「 RGB 色空間で gamma != 1.0」を示していて、sRGB プロファイルが埋め込まれている事は保証しません。

ICCプロファイルの変更 (change) と画像ピクセルデータ補正

単に ICC プロファイルを差し替えるだけでなく、画像ピクセルデータも補正します。具体的には、元々埋め込まれていた ICC プロファイルとしての RGB 値から、これから埋め込む ICC プロファイル相当の RGB 値に変更します。

% identify -format "%[profiles]\n" test.jpg
icc
% convert test.jpg -profile sRGB.icc output.jpg
%

↓ ↓ ↓

備考: CMYK プロファイル

先の挿入ケースと異なり、ICC プロファイルが埋め込まれた RGB (YCbCr)JPEG に対しては、 CMYK の ICC プロファイルを適用すると、自動で CMYK JPEG に変換されるようです。

% identify srgb.jpg
srgb.jpg JPEG 400x400 400x400+0+0 8-bit sRGB 5217B 0.000u 0:00.009
% identify -verbose srgb.jpg | grep -i profile
  Profiles:
    Profile-icc: 3212 bytes
% convert srgb.jpg -profile JapanColor2001Coated.icc cmyk.jpg
% identify cmyk.jpg
cmyk.jpg JPEG 400x400 400x400+0+0 8-bit CMYK 563037B 0.000u 0:00.000

CMYK については、こちらで少し解説しています。参考になれば幸いです。

最後に

-profile オプションを使った時の動作が、

  • JPEG に ICC プロファイルが入っていない場合 => 単純に ICC プロファイルを追加するだけ
  • JPEG に ICC プロファイルが入っている場合 => ICC プロファイルを差し替えると同時に、画像データの RGB値を、元の ICC から新しい ICC 相当に補正する

といったところが注意点で、他は素直な使い方だと思います。

参考 URL