位图PNG保存无需修改

时间:2013-09-15 15:37:14

标签: c# image gdi+

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

我最接近的是使用AForge灰度滤镜和存储,将其转换为调色板存储。

然后结果更接近原始结果,但由于托盘,它通常仍然更大。

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