【问题标题】:PNG Compression in .net.net 中的 PNG 压缩
【发布时间】:2011-10-18 20:22:06
【问题描述】:

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

【问题讨论】:

  • this 有用吗?如果你已经知道如何创建 PNG 并且只是想对其进行优化,可以使用this tool 并通过Process.Start() 方法执行。

标签: c# image png image-compression


【解决方案1】:

根据这个答案C#: Seeking PNG Compression algorithm/library C# 中的 PNG 是一个无损压缩库,例如不支持多个质量级别。

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

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

【讨论】:

  • 也许他在问如何改变位深度?
  • “似乎确认压缩格式是有损的”如果我错了,请纠正我,但 png 是无损的,而不是有损的......
  • 压缩级别等于质量级别。例如,Winrar 总是会产生无损压缩(否则对文件传输会很不利),因此它的“质量级别”始终是 100%,但它确实具有压缩级别;更高的压缩率将使最终文件占用更少的空间,但压缩/解压缩需要更长的时间。
【解决方案2】:

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

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

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

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

  1. 如果要在桌面环境中运行可执行文件,可以使用these tools 之一作为优化器。但是,在共享主机中,由于可能存在特权,您无法使用它们。
  2. 您可以在 .NET 中编写自己的 PNG 编写器,该编写器会考虑一些蛮力参数调整。

【讨论】:

  • 无损压缩方法不必是单一质量级别。 - 如果按照质量,你在谈论图像质量,那么你是不正确的。根据定义,它必须提供完全相同的质量。
  • 我认为,很明显我在谈论压缩级别(即压缩大小方面的输出质量)。此外,我已经明确表示:“我的意思是,一些无损压缩方法有一些参数来选择速度/压缩比的权衡。”。
  • 质量 通常不是一个与文件大小相关的词。所以不,不清楚。
  • 是的,应该是“不必是单个压缩级别”
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2017-01-28
  • 2019-02-22
  • 2011-11-19
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多