Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不丢失EXIF数据的情况下,使用.NET调整图像大小_C#_.net_Image_Resize_Exif - Fatal编程技术网

C# 在不丢失EXIF数据的情况下,使用.NET调整图像大小

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等格式定义-当您将此类图像加载到图形对象中以调整大小时,实

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


目前,我发现处理这一切的唯一简单方法是使用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数据的情况下调整大小: