位图 PNG 保存而不进行修改

本文关键字:修改 PNG 保存 位图 | 更新日期: 2023-09-27 18:31:19

我正在尝试将PNG图像加载到位图中并保存而不进行修改。

我尝试了以下方法:

var png = Bitmap.FromFile("t_02.png");
png.Save("t_02_out.png", ImageFormat.Png);

我也试过:

var png = Bitmap.FromFile("t_02.png");
png.Save("t_02_out.png");

无论哪种情况,原始的 233kb 文件都会生成 356kb 的图像。我做错了什么?

位图 PNG 保存而不进行修改

PNG是压缩格式。加载时解压缩,保存时压缩。结果不必完全相同。不同之处在于,最初图像的压缩效率高于代码使用的压缩器(或者,您需要微调压缩选项)。特别是,如果您曾经使用流行的图形编辑器工具保存到PNG中,则可以选择在那里指定压缩级别,从而为同一图片指定不同的输出。

从评论中提供有用的链接:

  • 如何指定压缩级别?
  • C#:查找 PNG 压缩算法/库

有问题的图像以灰度颜色类型存储。该规范描述了:

http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html

然后将像素存储为单个字节。 .NET将 PNG 文件另存为 32 位,而不考虑像素格式。

我得到的最接近的是使用灰度滤镜和存储AForge将其变成调色板存储。

结果更接近原始版本,但由于palet,它通常仍然更大。

结论:.NET 图像格式支持很糟糕。我用ImageMagic来解决.NET的无能。