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