2009-08-05 14 views
5

EXIFデータを失うことなく、.NETを使用して画像のサイズを変更する最適な方法は何ですか? .NET 2 System.Drawing。*クラス、WPFクラス、またはオープンソースライブラリを使用しても問題ありません。EXIFデータを失うことなく.NETで画像のサイズを変更する

このすべてを処理するための唯一の簡単な方法は、Graphics.FromImage(.NET 2)を使用してサイズ変更を実行し、OpenSourceライブラリでEXIFデータを手動で書き直すことです一つずつ)。

+0

を:http://tidytinypics.codeplex.com/ – TigrouMeow

答えて

3

サイズ変更前にEXIFデータを抽出し、EXIFデータを再挿入することをお勧めします。

EXIFデータは、JPEGやTIFFなどのフォーマットでしか定義できません。サイズ変更のためにこのようなイメージをGraphicsオブジェクトにロードすると、基本的にイメージが通常のビットマップに変換されます。したがって、EXIFデータが失われます。

C#hereを使用したEXIF抽出に関する関連スレッド。

+0

わかりました、私は私の解決策を維持して、それは非常にうまくいっていますが、それだけでは何のコードもありません:) – TigrouMeow

+0

私が知っている唯一の他の代替手段はImageMagickです - EXIFデータを失うことなく変換できますが、あなたがすでにやっているのと同じことをやって、おそらくもっと速くなるでしょう。 –

2

私は魔術.NETを使用して2つの拡張メソッドを作成しました:私はEXIFデータを失うことなく、サイズ変更をフィーチャーし、CodePlexの上のプロジェクトを追加

public static byte[] ToByteArray(this Image imageIn) 
    { 
     MemoryStream ms = new MemoryStream(); 
     imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     return ms.ToArray(); 
    } 

    public static Image AttachMetadData(this Image imgModified, Image imgOriginal) 
    { 
     using (MagickImage imgMeta = new MagickImage(imgOriginal.ToByteArray())) 
     using (MagickImage imgModi = new MagickImage(imgModified.ToByteArray())) 
     { 
      foreach (var profileName in imgMeta.ProfileNames) 
      { 
       imgModi.AddProfile(imgMeta.GetProfile(profileName)); 
      } 
      imgModified = imgModi.ToImage(); 
     } 
     return imgModified; 
    } 
関連する問題