使用.NET调整图像大小而不会丢失EXIF数据

时间:2009-08-05 01:19:29

标签: c# .net image resize exif

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

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

2 个答案:

答案 0 :(得分:3)

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

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

使用C#here进行EXIF提取的相关主题。

答案 1 :(得分:2)

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