2

我正在尝试将 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 的图像。我究竟做错了什么?

4

2 回答 2

2

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

从评论中放置有用的链接:

于 2013-09-15T15:41:14.740 回答
0

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

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

然后将像素存储为单个字节。.NET无论像素格式如何,都将 PNG 文件保存为 32 位。

我得到的最接近的是使用AForge灰度过滤器和存储,这将它变成了调色板存储。

然后结果更接近原始结果,但由于调色板的原因,它通常仍然更大。

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

于 2013-09-18T13:31:48.717 回答