【问题标题】:Bitmap PNG save without modifications位图PNG保存不修改
【发布时间】:2013-09-19 18:51:30
【问题描述】:

我正在尝试将 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 支持许多 GDI+ 无法重现的图像格式。如果它很重要,您可以修改 PngBitmapEncoder,BitmapSource 可以让您更好地控制 PixelFormat。

标签: c# image gdi+


【解决方案1】:

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

从 cmets 建立有用的链接:

【讨论】:

【解决方案2】:

相关图像以灰度颜色类型存储。规范描述:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2018-08-25
    • 1970-01-01
    • 2021-02-09
    • 2018-02-12
    • 2017-01-25
    • 1970-01-01
    相关资源
    最近更新 更多