EXIF データを失うことなく、.NET を使用して画像のサイズを変更する最良の方法は何ですか? .NET 2 System.Drawing.* クラス、WPF クラス、またはオープンソース ライブラリを使用しても問題ありません。
今のところこれを処理する唯一の簡単な方法は、Graphics.FromImage (.NET 2) を使用してサイズ変更を実行し、OpenSource ライブラリを使用して手動で EXIF データを書き直すことです (各データを 1 つずつ)。 .
サイズを変更する前にEXIFデータを抽出してからEXIFデータを再挿入するというあなたの提案は、まともな解決策のようです.
EXIF データは、JPEG や TIFF などの形式に対してのみ定義できます。サイズ変更のためにそのような画像を Graphics オブジェクトにロードすると、基本的に画像が通常のビットマップに変換されます。したがって、EXIF データが失われます。
C# を使用した EXIF 抽出に関する少し関連するスレッドはこちら。
私は Magick .NET を使用し、2 つの拡張メソッドを作成しました。
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;
}