2017年7月12日水曜日

C# Magick.NETを使ってみる。補足 画像情報取得

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

「C# Magick.NETを使ってみる。その2」
http://1studying.blogspot.com/2017/05/c-magicknet_31.html
の補足情報です。


画像の主要情報取得


画像の主要情報取得の為のコードを記載します。
「Form1」クラスの「button1」クリックイベントコードを以下に置換
        private void button1_Click(object sender, EventArgs e)
        {
            string fileStr = "./test_RGB.psd";
            //string fileStr = "./test_CMYK.psd";
            //string fileStr = "./test_グレー.psd";
            //string fileStr = "./test_2値.psd";
            using (var myMagick = new ImageMagick.MagickImage(fileStr))
            {
                chk_info(fileStr);//ファイルのインフォメーション表示
                chk_Exif(myMagick);//「Magick.NET画像」のEXIF情報表示
                chk_data(myMagick);//「Magick.NET画」の詳細情報書き出し
                MessageBox.Show("処理終了");
            }
        }
「Form1」クラス内に以下のコードを追記
        //ファイルのインフォメーション表示
        private void chk_info(string filenameStr)
        {
            var myMagickInfo = new ImageMagick.MagickImageInfo();
            myMagickInfo.Read("" + filenameStr);
            //「画像情報」取得
            string msg = "info\n";
            msg += "ファイル名:" + myMagickInfo.FileName + "\n";
            msg += "色空間:" + myMagickInfo.ColorSpace + "\n";
            msg += "横pixel:" + myMagickInfo.Width + "\n";
            msg += "縦pixel:" + myMagickInfo.Height + "\n";
            msg += "画像形式:" + myMagickInfo.Format + "\n";
            msg += "横解像度:" + myMagickInfo.Density.X + "\n";
            msg += "縦解像度:" + myMagickInfo.Density.Y + "\n";
            msg += "解像度の単位:" + myMagickInfo.Density.Units + "\n";
            MessageBox.Show(msg);
        }


        //「Magick.NET画像」のEXIF情報表示
        private void chk_Exif(ImageMagick.MagickImage myMagick)
        {
            //using (var myMagick = new ImageMagick.MagickImage("./Lenna.jpg"))
            //{
            //「Exif情報」取得
            ImageMagick.ExifProfile myMagickExif = myMagick.GetExifProfile();
            //「Exif情報」が存在すれば
            if (myMagickExif != null)
            {
                string str = "exif\n";
                foreach (var exifValue in myMagickExif.Values)
                {
                    str += exifValue.Tag + "(";
                    str += exifValue.DataType + "):";
                    str += exifValue.ToString() + "\n";
                }
                MessageBox.Show(str);
            }
            else
            {
                MessageBox.Show("Exif情報はありません");
            }
            //}
        }


        //「Magick.NET画」の詳細情報書き出し
        private void chk_data(ImageMagick.MagickImage myMagick)
        {
            string tmpStr = "";
            //using (var myMagick = new ImageMagick.MagickImage("./test_RGB.psd"))
            //using (var myMagick = new ImageMagick.MagickImage("./test_CMYK.psd"))
            //using (var myMagick = new ImageMagick.MagickImage("./test_グレー.psd"))
            //using (var myMagick = new ImageMagick.MagickImage("./test_2値.psd"))
            //{
            tmpStr += "取得開始\n";
            tmpStr += myMagick.Density.ToString() + "\n";
            tmpStr += myMagick.ColorType.ToString() + "\n";
            tmpStr += myMagick.Depth.ToString() + "\n";

            tmpStr += myMagick.ChannelCount.ToString() + "\n";//r
            tmpStr += myMagick.ClassType.ToString() + "\n";
            tmpStr += myMagick.ColorFuzz.ToString() + "\n";
            tmpStr += myMagick.ColormapSize.ToString() + "\n";
            tmpStr += myMagick.ColorSpace.ToString() + "\n";
            tmpStr += myMagick.Compose.ToString() + "\n";

            tmpStr += myMagick.Endian.ToString() + "\n";
            tmpStr += myMagick.FilterType.ToString() + "\n";
            tmpStr += myMagick.Format.ToString() + "\n";
            tmpStr += myMagick.Gamma.ToString() + "\n";//r
            tmpStr += myMagick.Height.ToString() + "\n";//r
            tmpStr += myMagick.Interlace.ToString() + "\n";
            tmpStr += myMagick.Interpolate.ToString() + "\n";
            tmpStr += myMagick.IsOpaque.ToString() + "\n";//r
            tmpStr += myMagick.MatteColor.ToString() + "\n";
            tmpStr += myMagick.Orientation.ToString() + "\n";
            tmpStr += myMagick.Page.ToString() + "\n";
            tmpStr += myMagick.ProfileNames.ToString() + "\n";//r
            tmpStr += myMagick.Quality.ToString() + "\n";
            tmpStr += myMagick.ReadMask.ToString() + "\n";
            tmpStr += myMagick.RenderingIntent.ToString() + "\n";
            tmpStr += myMagick.Settings.ColorSpace.ToString() + "\n";
            tmpStr += myMagick.Settings.ColorType.ToString() + "\n";
            tmpStr += myMagick.Settings.Endian.ToString() + "\n";
            tmpStr += myMagick.Settings.Format.ToString() + "\n";

            tmpStr += myMagick.Signature.ToString() + "\n";//r
            tmpStr += myMagick.TotalColors.ToString() + "\n";//r
            tmpStr += myMagick.VirtualPixelMethod.ToString() + "\n";
            tmpStr += myMagick.Width.ToString() + "\n";//r
            tmpStr += myMagick.WriteMask.ToString() + "\n";
            //}

            Encoding utf8Enc = Encoding.GetEncoding("utf-8");
            using (var writer = new System.IO.StreamWriter(@"./test_out.txt", false, utf8Enc))
            {
                writer.Write(tmpStr);
                writer.WriteLine("取得終了。");
                MessageBox.Show("「Magick.NET画像」詳細情報を\n「test_out.txt」へ書き出しました");
            }
        }
該当する画像を読み込み、必要な情報を取得します。




「Magick画像」の主要プロパティ設定値



「Magick画像」主要プロパティ一覧
・テストに使用したデータ
 DLL「Q8」使用
 600Dpi
 2362×2362Pixel、99.99×99.99mm
 「Photoshop」で作成したpsd(画像統合済み、レイヤー無し)
の「RGB」「CMYK」「グレースケール」、「2階調」画像を、
それぞれ「Magick画像」として開き検証してみた。
↓(r)はGetのみ 「RGB」 「CMYK」 「Gray」 「2値」
「Density」 600x600 inch 600x600 inch 600x600 inch 600x600 inch
「ColorType」 TrueColor ColorSeparation Palette Palette
「Depth」 8 8 8 1
(r)
「ChannelCount」
3 4 2 2
「ClassType」 Direct Direct Pseudo Pseudo
「ColorFuzz」 0% 0% 0% 0%
「ColormapSize」 -1 -1 256 256
「ColorSpace」 sRGB CMYK Gray Gray
「Compose」 Over Over Over Over
「Endian」 MSB MSB MSB MSB
「FilterType」 Undefined Undefined Undefined Undefined
「Format」 Psd Psd Psd Psd
(r)
「Gamma」
0.4545454
38289642
0.4545454
54545455
0.4545454
54545455
0.4545454
54545455
(r)
「Height」
2362 2362 2362 2362
「Interlace」 NoInterlace NoInterlace NoInterlace NoInterlace
「Interpolate」 Undefined Undefined Undefined Undefined
(r)
「IsOpaque」
True True True True
「MatteColor」 #BDBDBDFF #BDBDBDFF #BDBDBDFF #BDBDBDFF
「Orientation」 TopLeft TopLeft TopLeft TopLeft
「Page」 2362x2362 2362x2362 2362x2362 2362x2362
(r)
「ProfileNames」
(stringコンテナ) (stringコンテナ) (stringコンテナ) (stringコンテナ)
「Quality」 0 0 0 0
「ReadMask」 Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 1-bit Gray 0.00
「RenderingIntent」 Perceptual Perceptual Undefined Undefined
「Settings.
ColorSpace」
Undefined Undefined Undefined Undefined
「Settings.
ColorType」
Undefined Undefined Undefined Undefined
「Settings.
Endian」
Undefined Undefined Undefined Undefined
「Settings.
Format」
Unknown Unknown Unknown Unknown
(r)
「Signature」
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(r)
「TotalColors」
766 1281 256 2
「VirtualPixelMethod」 Undefined Undefined Undefined Undefined
(r)
「Width」
2362 2362 2362 2362
「WriteMask」 Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 8-bit Gray 0.00
Psd 2362x2362
 1-bit Gray 0.00

考察
「RGB」と「CMYK」の違いは「ColorType」と「ColoreSpace」で判別している?
「グレースケール」と「2値」データの違いはDepthが1か8かの違いのみ。
 「Gamma」は「0.454545…」となっているが、
実際は「1/0.454545…」なので、標準的につかわれる「Gamma2.2」となる。



「Magick画像」の主要プロパティ設定値2



色々な「Magick画像」のデータを比較してみる。

・Q8「RGB」
 DLL「Q8」使用
 600Dpi
 2362×2362Pixel、99.99×99.99mm
 「Photoshop」で作成したpsd(画像統合済み、レイヤー無し)の「RGB」画像
・Q16「自作RGB」
 DLL「Q16」使用
 背景緑、150×150Pxel
            //「インスタンス時に開く」(背景緑、150*150)
            using (var myMagick = new ImageMagick.MagickImage(new ImageMagick.MagickColor("#00ff00"), 150, 150))
            {
            }
で生成
・Q8 Ps変換「2値Tiff」
 DLL「Q8」使用
 Q8「RGB」を「Photoshop」でグレースケール化→2値化した物です。
 「画像圧縮をLZW」で保存しています。
・Q8 自前変換「2値Tiff」
 DLL「Q8」使用
 Q8「RGB」を「Magick.NET」でグレースケール化→2値化した物です。

 の順で変換後保存。
 (保存前にプロパティやExif調べて、
  保存後、再度開いてのプロパティやExifを調べる。違いがでるか…確認。
  PSDとtiffで保存した場合、開いた物との違いは出るのか?
  ↓
  違いが出るっぽい。
  ここでの表は後で取得し直す必要あり。)

↓(r)はGetのみ Q8
「RGB」
Q16
「自作RGB」
Q8 Ps変換
「2値Tiff」
Q8 自前変換
「2値Tiff」
「Density」 600x600 inch 0x0 600x600 inch
「ColorType」 TrueColor TrueColor Bilevel
「Depth」 8 16 1
(r)
「ChannelCount」
3 3 1
「ClassType」 Direct Direct Direct
「ColorFuzz」 0% 0% 0% 0%
「ColormapSize」 -1 -1 -1
「ColorSpace」 sRGB sRGB Gray Gray
「Compose」 Over Over Over Over
「Endian」 MSB LSB LSB MSB
「FilterType」 Undefined Undefined Undefined Undefined
「Format」 Psd Xc Tiff Psd
(r)
「Gamma」
0.4545454
38289642
0.4545454
38289642
0.4545454
54545455
0.4545454
54545455
(r)
「Height」
2362 150 2362 2362
「Interlace」 NoInterlace NoInterlace NoInterlace NoInterlace
「Interpolate」 Undefined Undefined Undefined Undefined
(r)
「IsOpaque」
True True True True
「MatteColor」 #BDBDBDFF #BDBDBDBD
BDBDFFFF
#BDBDBDFF #BDBDBDFF
「Orientation」 TopLeft Undefined TopLeft TopLeft
「Page」 2362x2362 150x150 2362x2362 2362x2362
(r)
「ProfileNames」
(stringコンテナ) (stringコンテナ) (stringコンテナ) (stringコンテナ)
「Quality」 0 0 0 0
「ReadMask」 Psd 2362x2362
 8-bit Gray 0.00
Xc 150x150
 16-bit Gray 0.00
Tiff 2362x2362
 1-bit Gray 0.00
Psd 2362x2362
 1-bit Gray 0.00
「RenderingIntent」 Perceptual Perceptual Undefined Undefined
「Settings.
ColorSpace」
Undefined Undefined Undefined Undefined
「Settings.
ColorType」
Undefined Undefined Undefined Undefined
「Settings.
Endian」
Undefined Undefined Undefined Undefined
「Settings.
Format」
Unknown Unknown Unknown Unknown
(r)
「Signature」
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(署名)
ユニークな英数字
(r)
「TotalColors」
766 1 2 2
「VirtualPixelMethod」 Undefined Undefined Undefined Undefined
(r)
「Width」
2362 150 2362 2362
「WriteMask」 Psd 2362x2362
 8-bit Gray 0.00
Xc 150x150
 16-bit Gray 0.00
Tiff 2362x2362
 1-bit Gray 0.00
Psd 2362x2362
 1-bit Gray 0.00


考察
・「Q16」で新規キャンバスを作成した時のみ「Depth」は「16」となる。
 16bitの色深度をサポートしていないビューアが多い為、
 「Q16」で新規キャンバスを作成する場合注意が必要。
・これとは別に、
 Q8「RGB」と同じファイルをQ16で開いてみても全ての値は同じだった。
 「Depth」は「8」となる。
・「Endian」エンディアンの違い
 「LSB」リトルエンディアン
 「MSB」ビックエンディアン
 保持される画像形式により違いが出る。
・注意!
 保存形式を変更した場合、
 そのままで、情報を取得したものと、
 保存したファイルを開き直したものとで、結果に違いが出る!



表に関しては、
再度作り直しが必要。
値を信じ切らないようにして下さい。
中途半端な状態での公開です。



0 件のコメント:

コメントを投稿

↑Topへ