打开图像并使用相同的参数重新保存它,c#

Posted

技术标签:

【中文标题】打开图像并使用相同的参数重新保存它,c#【英文标题】:Open an image and re-save it with the same parameters, c# 【发布时间】:2016-07-26 07:00:51 【问题描述】:

在我的代码中,我打开一个位图图像并简单地重新保存它。它应该保持相同的质量和性能。但结果图像的大小发生了变化,尽管分辨率保持不变,并且视觉上没有变化。如何在不进行任何更改的情况下打开并保存图像? 我的代码:

            Bitmap img = (Bitmap)Image.FromFile(path, true);
            img.Save(path);

以后它应该只改变图像的不透明度,但现在它只是打开并保存它。为什么图像大小会发生变化?它变得比以前更小(386 对 301 Kb)

更新:

我对JPG格式的图像做了同样的事情,大小保持不变。只有 PNG 正在改变它的大小。在另一个PNG文件大小变得更大。有没有办法避免这种情况?

【问题讨论】:

Bitmap.Save 默认情况下将图像保存在PNG 我认为。与您正在加载的图像格式相同吗? PNG 是无损的,所以文件大小可能会改变,像素/质量本身保持不变。 我使用下面的答案来确保我保存为 png,但大小仍在变化。 @CasparKleijne 我需要尺寸保持不变,可以这样做吗? 【参考方案1】:

如果文件大小发生变化,您无需担心。 PNG 是一种无损格式,可在压缩文件的同时保留所有信息。这确实意味着,即使文件大小减小,每个像素的信息和确切颜色也将保持不变。

文件的大小取决于用于保存图像的库所使用的算法。对于不同的库和程序,算法可能会有所不同。这就是为什么您的图像大小会发生变化。这是你无法避免的。

【讨论】:

【参考方案2】:

您可能以与原始文件不同的图像格式保存图像。例如,如果原始图像是GIF,你应该这样做:

img.Save(path, System.Drawing.Imaging.ImageFormat.Gif);

任何格式都可以这样。

【讨论】:

我正在打开一个.png文件并将其另存为.png,我尝试使用您的方式,但大小仍在变化。 @SamStone 那么,.Net png 算法可能与用于保存原始图像的算法不同,或者可能正在更改颜色深度,从而导致文件大小不同。只是为了检查,您可以尝试对 .net 生成的 png 文件执行相同的操作,我的意思是,打开并保存在第一步中生成的文件以查看它是否更改。您还可以使用任何图像信息软件来比较两个图像,看看是否有不同的东西......【参考方案3】:

System.Drawing 中的 PNG 编码器不会特别大量地压缩图像,也无法更改它。许多人尝试使用的EncoderParameters 属性被简单地忽略了。

可用软件中的不同 PNG 编码器提供不同的压缩功能,您将看到的差异是压缩的差异。第一个很可能在没有压缩的情况下保存,而第二个则通过较重的压缩保存。

【讨论】:

以上是关于打开图像并使用相同的参数重新保存它,c#的主要内容,如果未能解决你的问题,请参考以下文章

如何保存单个值并重新打开它们以供以后使用?

保存后不显示个人资料图像(它只显示空白屏幕)

C# 保存并重新填充数组中的数据

使用 python 3.7.3,我想要 base64 编码的照片并调整它的大小而不保存到文件到磁盘并使用 Image.open() 重新打开文件

UserDefaults 不会在应用程序关闭并重新打开后保存数据

C#图片框图片消失