【发布时间】:2011-10-18 20:22:06
【问题描述】:
我想将位图压缩为具有不同压缩级别的 PNG,因为这些级别在 C# 中的 JPEG 压缩中可用。我有 20 到 30 张不同尺寸的图像要在 1 秒内处理。是否有任何库可以在不同压缩级别的 PNG 中实现这种压缩?
【问题讨论】:
标签: c# image png image-compression
我想将位图压缩为具有不同压缩级别的 PNG,因为这些级别在 C# 中的 JPEG 压缩中可用。我有 20 到 30 张不同尺寸的图像要在 1 秒内处理。是否有任何库可以在不同压缩级别的 PNG 中实现这种压缩?
【问题讨论】:
标签: c# image png image-compression
根据这个答案C#: Seeking PNG Compression algorithm/library C# 中的 PNG 是一个无损压缩库,例如不支持多个质量级别。
PNG (http://en.wikipedia.org/wiki/Portable_Network_Graphics) 上的 wiki 页面似乎确认压缩格式是无损的(例如,只有一个压缩级别)
一些谷歌搜索表明有关于 PNG 有损版本的研究
【讨论】:
无损压缩方法不必是单一质量级别。我的意思是,一些无损压缩方法有一些参数来选择速度/压缩比的权衡。这取决于作者。
对于 PNG 压缩,实际上是一堆过滤器和放气算法。考虑到 deflate 有一个冗余的编码阶段(例如,两个不同的压缩器可以产生完全不同的输出,但它们仍然可以被任何有效的解压缩器解压缩),难怪几个程序输出不同的 PNG。请注意,我仍然没有考虑过滤器。有几个过滤器,没有“最佳”过滤器,即它的质量因图像而异。
由于它的冗余特性,一些人编写了 PNG 优化器,它以常规 PNG 作为输入来生成更小的 PNG,而不会造成任何感知损失。其中一些应用了一些技巧,例如用一些可预测的颜色填充完全透明的区域以增加压缩。但是,通常他们以蛮力的方式调整参数。
现在,对于您的问题,最简单的答案可能是您有两个选择:
【讨论】: