gpt4 book ai didi

c# - 位图保存 jpeg 失败但 png 可以,因为注释属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:04 25 4
gpt4 key购买 nike

问题描述:

当我以JPEG 格式模式将位图保存为JPEG 文件时,抛出Gdi 异常。但是当我用PNG格式模式保存时,可以成功保存。

快速重建:

  1. 请将图片从浏览器保存为.jpg 文件。点击此处:IncorrectImage , CorrectImage .(实际上,在我们的应用程序中,我们动态请求图像,然后将图像保存为 JPEG。)

  2. 使用下面的代码查看异常:

    string newFile = @"D:\Temp\newImage.jpg";
    var newBitmap = Image.FromFile(@"D:\Temp\IncorrectImage.jpg");
    newBitmap.Save(newFile,System.Drawing.Imaging.ImageFormat.Jpeg);

我发现了什么:

经过深入调查,我发现问题的根源在于原始图像的评论属性。当我删除属性值时,错误消失。另外,我只要把图片的注释值复制到记事本里再粘贴回来,用上面的代码就可以把图片保存成新的图片,而且图片的尺寸更大了! enter image description here

因此,我猜测在保存到 jpeg 文件时,注释属性可能包含一些敏感或不正确的字符。伙计们可以就这些评论给我们一些见解吗?

提前致谢。

更多尝试:

我试试下面的代码:

        //foreach (var item in newBitmap.PropertyItems)
//{
// if (item.Id == 37510)
// {
// item.Value = null;
// item.Len = 0;
// }
//}
newBitmap.RemovePropertyItem(37510);
newBitmap.Save(newFile, System.Drawing.Imaging.ImageFormat.Jpeg);

如果我删除了属性项,那么新图像就可以成功保存了。但是,如果我像注释代码一样将它的值设置为null,仍然会抛出异常。

请帮助我:

  1. 为什么我只是清除评论然后粘贴相同的值时图像尺寸较大(原始尺寸为 48k,剪切和粘贴后约为 78k)。这可能是一个错误吗?
  2. 为什么清除注释后粘贴相同的值后图像可以保存成功?是剪贴板过滤了一些无效字符吗?
  3. 为什么我设置comments属性值为null后还是保存不了图片?但如果我删除该属性,它就可以工作,就像我尝试之前一样?

希望您能帮我找出问题的根源。

最佳答案

我已经从 MSDN 找到了问题的根源 http://social.msdn.microsoft.com/Forums/en-US/83b24aa5-511f-47cd-856a-4fbbb5688ddf/bitmap-save-jpeg-failled-but-png-is-ok-because-of-the-comments-property

原始注释似乎使用 ASCII 编码,但 GDI+ 自动将其转换为 Unicode。注释已经很大,转换为 Unicode 后其大小加倍,超过了 EXIF block 的最大大小(64 KB)。

关于c# - 位图保存 jpeg 失败但 png 可以,因为注释属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17779499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com