6

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

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

4

2 回答 2

3

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

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

关于此处使用 C# 提取 EXIF 的稍微相关的线程。

于 2009-08-05T01:32:55.550 回答
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;
    }
于 2014-11-03T17:32:10.887 回答