2017年7月12日水曜日

C# Magick.NETを使ってみる。ICCプロファイル変換

C# Magick.NETを使ってみる
目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw07

「Magick.NET」の「ICCプロファイル」の扱い方。

先に、
「Photoshop」でのカラーマネジメント方法を知る必要があります。
Photoshop上でのカラーモードとICCプロファイル
については以下のリンク先で説明しています。
http://1studying.blogspot.jp/2017/05/photoshopicc.html


色々なプロファイル


画像ファイル「ICCプロファイル」の他にも、
様々な「プロファイル」が付加されている(埋め込まれている)可能性があります。
            using (var myMagick = new ImageMagick.MagickImage("./test_RGB.psd"))
            {
                var strArray = myMagick.ProfileNames.ToArray();
                MessageBox.Show(strArray.Length.ToString());
                foreach (var profileName in strArray)
                {
                    MessageBox.Show(profileName); //埋め込みプロファイル名を表示
                }
            }
            MessageBox.Show("処理終了");
の様にすると確認できます。
実行すると、
「5」「8bim」「exif」「icc」「iptc」「xmp」「処理終了」
のように順表示されます。
(ファイルに埋め込まれていないプロファイルは表示されません。)

・「8bim」(8bimプロファイル)
 →「myMagick.Get8BimProfile()」
・「exif」(Exif情報)
 →「myMagick.GetExifProfile()」
・「icc」(カラーマネジメント用「ICCプロファイル」)
 →「myMagick.GetColorProfile()」
 画像を表示する際の、色変換フィルタ。
・「iptc」(IPTC情報)
 →「myMagick.GetIptcProfile()」
・「xmp」(Xmp情報)
 →「myMagick.GetXmpProfile()」
 「Photoshop」上でファイル情報からも確認できる。(IPTC情報も編集可)



「Magick.NET」の標準「ICCプロファイル」


「Magick.NET」では、標準的に以下の「ICCプロファイル」を内蔵しています。

「AdobeRGB1998」「AppleRGB」「CoatedFOGRA39」
「ColorMatchRGB」「SRGB」「USWebCoatedSWOP」
です。
普段は、
RGBカラーは「SRGB」
CMYKカラーは「CoatedFOGRA39」(USWebCoatedSWOPより結果が良い)
辺りを使用していれば問題ないと思います。



「ICCプロファイル」変換(普通の方法)


「Magick.NET」に内蔵された「ICCプロファイル」で変換します。
            using (var myMagick = new ImageMagick.MagickImage("./test_RGB.psd"))
            {
                //「マッチング方法」→「Perceptual」知覚的(Photoshopデフォルト)
                myMagick.RenderingIntent = ImageMagick.RenderingIntent.Perceptual;
                //「黒点の補正を使用」
                myMagick.BlackPointCompensation = true;

                //「ICCプロファイル」が埋め込まれていなければ
                if (myMagick.GetColorProfile() == null)
                {
                    myMagick.AddProfile(ImageMagick.ColorProfile.SRGB);
                    MessageBox.Show("埋め込みました");
                }

                //埋め込まれた「ICCプロファイル」(RGB)から
                //他の「ICCプロファイル」(CMYK)へ変換
                myMagick.AddProfile(ImageMagick.ColorProfile.CoatedFOGRA39);

                //プロファイルの削除
                myMagick.RemoveProfile("icc");

                //「背景」にする(アルファを白くします)
                myMagick.ColorAlpha(ImageMagick.MagickColors.White);

                myMagick.Write("./test_outfile.tif");
            }
            MessageBox.Show("処理終了。");
「RGB」から「CMYK」へカラーモードが変更されました。
「Photoshop」にそこそこ近い結果の画像が取得出来ます。


「ICCプロファイル」が現在の画像に埋め込まれているかの確認を
                if (myMagick.GetColorProfile() == null)
で行っています

「AddProfile()」は画像へ「ICCプロファイル」を埋め込みます。
                    myMagick.AddProfile(ImageMagick.ColorProfile.SRGB);
既に「ICCプロファイル」が埋め込まれている場合は、
既に埋め込まれている「ICCプロファイル」から、
新たに指定した「ICCプロファイル」へ「色変換」した上で
「ICCプロファイル」が埋め込み直されます。

埋め込まれた「ICCプロファイル」を削除するのは
                myMagick.RemoveProfile("icc");
で行います。


何故その「ICCプロファイル」を選択したのか、
何故その変換方式や設定を使用しているのか、
については次のトピックで解説します。



「ICCプロファイル」変換(普通の方法)解説



RGBの「ICCプロファイル」
・「SRGB」を使用する理由
 「Photoshop」のRGB時のデフォルトの「ICCプロファイル」が
 「sRGB IEC61966-2.1」となっています。
 これは、大抵のモニタの色域が「sRGB」の為です。 
 「SRGB」を指定すると、
 「sRGB IEC61966-2.1」(Photoshopのデフォルトと同じ物)
 が自動で使用されます。
myMagick.AddProfile(ImageMagick.ColorProfile.SRGB);


CMYKの「ICCプロファイル」
・「CoatedFOGRA27」を使用する理由
 印刷に使われる「PDF/X」でCMYK書き出しする際、
 Adobeのソフトから書き出し時「ICCプロファイル」指定無しの場合、
 「PDF/X-1a:2001」では「USWebCoatedSWOP.icc」
 「PDF/X-3:2002」(X-1aの上位互換)では「CoatedFOGRA27.icc」
 がデフォルトで使われます。
 「Photoshop」デフォルトの「Japan Color 2001 Coated」に
 より近い結果がでる「CoatedFOGRA27」の方を使用するのが良いでしょう。
                myMagick.AddProfile(ImageMagick.ColorProfile.CoatedFOGRA39);


「変換方式」
・「LCMS(Little CMS)」を使用する理由
 「Magick.NET」は何も指定しなくても「LCMS(Little CMS)」を使用します。
 (「LCMS」はオープンソースの変換エンジンです)
 「Photoshop」では「ACE(Adobe Color Engine)」が使用されています。
 が、現在「Magick.NET」からは変換エンジンを指定する事ができません。
 その為、特に指定しません。(「LCMS(Little CMS)」が使用されます)


「マッチング方法」(レンダリングインテント)
・「Perceptual」(知覚的)を利用する理由
 「Photoshop」のデフォルト設定が「知覚的」となっている為これを使用します。
 以下のような設定も可能です。
 「Absolute」(絶対的な色域を保持)
 「Perceptual」(知覚的)(Photoshopデフォルト)
 「Relative」(相対的な色域を保持)
 「Saturation」(彩度)
                myMagick.RenderingIntent = ImageMagick.RenderingIntent.Perceptual;


「黒点の補正を使用」
・「黒点の補正を使用」をtrueにする理由
 「Photoshop」の「黒点の補正を使用」デフォルト設定が「ON」
 となっている為これを使用します。
                myMagick.BlackPointCompensation = true;


「ディザの使用」
・「ディザの使用」をtrueにしたいが出来ない。
 「Photoshop」の「ディザの使用」デフォルト設定が「ON」となっている為です。
 が、「Magick.NET」内に設定が今のところ見当たりませんでした。




「Photoshop」カラーモード変換をエミュレート



自分用めも:
「C# Magick.NETでPhotoshopカラーモード変換をエミュレート」非公開
http://00studying.blogspot.jp/2017/07/c-magicknetcolorpshopemu.html






CMYKとRGBの相互変換時、
「myMagick.ColorSpace = ImageMagick.ColorSpace.sRGB;」

「myMagick.ColorType = ImageMagick.ColorType.TrueColor;」
で変換行うと
「可変R255G255B←→C」
「255R可変G255B←→M」
「255R255G可変B←→Y」
の数値がそのまま変換されます。
Kのみ「可変R可変G可変B←K」で変換されます。


「Magick.NET」の使い方は
https://magick.codeplex.com/documentation
に載っています


以下のサイトを参考にしました。
[めも][ImageMagick]Magick.NET のカラマネAPI
http://www.cat-ears.net/?p=39561

Windowsカラーマネジメントプログラミング入門(?)
http://blog.livedoor.jp/yamma_ma/archives/8414849.html
Windowsカラーマネジメントプログラミング入門(2)
http://blog.livedoor.jp/yamma_ma/archives/8434429.html
Windowsカラーマネジメントプログラミング入門(3)
http://blog.livedoor.jp/yamma_ma/archives/43764758.html
Windowsのカラーマネジメントシステム まとめ
http://blog.livedoor.jp/yamma_ma/archives/35547647.html

ImageMagickのPSDの扱い方
http://paranoid360.blogspot.jp/2011/04/imagemagickpsd.html
ImageMagick PSD続き、PNGをインデックスカラーで透過
http://paranoid360.blogspot.jp/2011/04/imagemagick-psdpng.html

ImageMagick で ICC プロファイルを扱う #3 コマンド解説
https://blog.awm.jp/2017/08/06/imicc/


0 件のコメント:

コメントを投稿

↑Topへ