C# 在不丢失EXIF数据的情况下,使用.NET调整图像大小
在不丢失EXIF数据的情况下,使用.NET调整图像大小的最佳方法是什么?我可以使用.NET2 System.Drawing.*类、WPF类或开源库C# 在不丢失EXIF数据的情况下,使用.NET调整图像大小,c#,.net,image,resize,exif,C#,.net,Image,Resize,Exif,在不丢失EXIF数据的情况下,使用.NET调整图像大小的最佳方法是什么?我可以使用.NET2 System.Drawing.*类、WPF类或开源库 目前,我发现处理这一切的唯一简单方法是使用Graphics.FromImage(.NET 2)执行调整大小,并使用开源库手动重新写入EXIF数据(每个数据段逐个)。您关于在调整大小之前提取EXIF数据的建议,然后重新插入EXIF数据似乎是一个不错的解决方案 EXIF数据只能为JPEG和TIFF等格式定义-当您将此类图像加载到图形对象中以调整大小时,实
目前,我发现处理这一切的唯一简单方法是使用Graphics.FromImage(.NET 2)执行调整大小,并使用开源库手动重新写入EXIF数据(每个数据段逐个)。您关于在调整大小之前提取EXIF数据的建议,然后重新插入EXIF数据似乎是一个不错的解决方案 EXIF数据只能为JPEG和TIFF等格式定义-当您将此类图像加载到图形对象中以调整大小时,实际上是将图像转换为常规位图。因此,您将丢失EXIF数据
关于使用C#提取EXIF的稍微相关的线程。我使用了Magick.NET并创建了两种扩展方法:
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;
}
好吧,我保留了我的解决方案,它工作得很好,只是有很多代码,但速度足够快:)我知道的唯一其他替代方法是ImageMagick-我知道你可以在不丢失EXIF数据的情况下进行转换,但该库基本上做了与你已经做的相同的事情,可能更快。我在CodePlex上添加了一个项目,其特点是在不丢失EXIF数据的情况下调整大小: