首页 文章

位图保存jpeg失败,但由于comments属性,png是可以的

提问于
浏览
2

Question Description:

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

Quick Recreate:

  • 请将图像保存到broswer的.jpg文件中 . 点击这里:IncorrectImageCorrectImage . (实际上,在我们的应用程序中,我们动态请求图像,然后将图像保存为JPEG . )

  • 使用以下代码查看异常:

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

What i found:

经过深入调查后,我发现问题的根源来自原始图像的 the Comments property . 当我删除属性值时,错误消失 . 此外,在我将图像的注释值的值复制到记事本然后粘贴后,可以将图像保存到具有较高代码的新图像中,并且图像的大小甚至更大!
enter image description here

所以,我想在保存到jpeg文件时,comments属性可能包含一些敏感或不正确的charector . 人们可以就这些评论提供一些见解吗?

提前致谢 .

More try:

我尝试以下代码:

//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);

如果我删除属性项,则可以成功保存newimage . 但是,如果我只是将其值设置为null,就像注释掉代码一样,仍会抛出异常 .

Please help me:

  • 为什么图像尺寸较大(原始尺寸为48k,切割后粘贴约78k)我只需清除注释然后再粘贴相同的值 . 有可能是一个bug吗?

  • 清除注释后,为什么可以成功保存图像,然后再粘贴相同的值?是剪贴板过滤一些无效的特征?

  • 为什么即使我设置了comments属性值为null,图像仍然无法保存?但如果我删除该属性,它可以工作,就像之前我尝试?

希望你能帮助我找出问题的根源 .

1 回答

相关问题