.net中的PNG压缩

我想将位图压缩为具有不同压缩级别的PNG,因为这些级别在C#中的JPEG压缩中可用。 我有20到30张不同尺寸的图像,可在1秒内处理。 是否有任何库可以在不同压缩级别的PNG中实现此压缩?

无损压缩方法不必是单一质量水平。 我的意思是,一些无损压缩方法有一些参数来选择速度/压缩比权衡。 这取决于作者。

至于PNG压缩,它实际上是一堆filter和deflate算法。 考虑deflate有一个冗余编码阶段(例如,两个不同的压缩器可以产生完全不同的输出,但它们仍然可以由任何有效的解压缩器解压缩),难怪几个程序输出不同的PNG。 请注意,我仍然没有考虑filter。 有几个filter,没有“最佳”filter,即它的质量因图像而异。

由于它的冗余function,有些人编写了PNG优化器,它将常规PNG作为输入,以产生较小的PNG,而不会产生任何感知损失。 其中一些应用了一些技巧,例如用一些可预测的颜色填充完全透明的区域来增加压缩。 但是,一般来说,他们以蛮力的方式调整参数。

现在,对于您的问题,最简单的答案可能是您有两个选择:

  1. 如果您要在桌面环境中运行可执行文件,则可以使用这些工具之一作为优化程序。 但是,在共享主机中,由于可能的权限,您无法使用它们。
  2. 您可以在.NET中编写自己的PNG编写器,其中考虑了一些暴力参数调整。

根据这个答案C#:在C#中寻找PNG压缩算法/库 PNG是一个无损压缩库,例如不支持多个质量等级。

PNG上的维基页面( http://en.wikipedia.org/wiki/Portable_Network_Graphics )似乎确认压缩格式是无损的(例如只有一个压缩级别)

一些谷歌搜索表明有关于PNG的有损版本的研究