2009-08-05 60 views
5

在不丢失EXIF数据的情况下使用.NET调整图像大小的最佳方法是什么?我可以使用.NET 2 System.Drawing。*类,WPF类或开源库。使用.NET调整图像大小而不会丢失EXIF数据

我发现现在处理这一切的唯一简单方法是使用Graphics.FromImage(.NET 2)来执行调整大小,并手动重新编写EXS数据(使用OpenSource库)(每段数据逐个)。

+0

我加了CodePlex上的一个项目,具有调整大小,而不会丢失EXIF数据:http://tidytinypics.codeplex.com/ – TigrouMeow 2009-12-11 01:10:25

回答

3

您在调整大小之前提取EXIF数据然后重新插入EXIF数据的建议似乎是一个不错的解决方案。

EXIF数据只能定义为JPEG和TIFF格式 - 当您将这样的图像加载到Graphics对象中进行大小调整时,实质上是将图像转换为常规位图。因此,你失去了EXIF数据。

关于使用C#提取EXIF的略有相关的线程#here

+0

好吧,我然后保持我的解决方案,它工作得很好,它只是很多代码,只是速度不够:) – TigrouMeow 2009-08-05 14:52:05

2

我用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; 
    }