在不丢失 EXIF 数据的情况下,使用 .NET 调整图像大小的最佳方法是什么?我可以使用 .NET 2 System.Drawing.* 类、WPF 类或开源库。
我发现目前处理这一切的唯一简单方法是使用 Graphics.FromImage (.NET 2) 执行调整大小并使用 OpenSource 库手动重写 EXIF 数据(每条数据一个接一个) .
您建议在调整大小之前提取 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;
}