托管PNG优化库可用

本文关键字:优化 PNG 托管 | 更新日期: 2023-09-27 18:08:21

我希望在PNG优化(各种PNG"挤压器/挤压器")中构建我的构建(TFS 2010构建工作流)。我想创建一个新的构建活动,与我所有的活动,我更喜欢有我所有的代码管理很少或没有依赖。

我已经搜索(谷歌),并发现许多不同的PNG库PNG优化。PNGOUT, PNGCRUSH, optiping等。它们都不是真正的。net。它们看起来都是很棒的工具。我更喜欢而不是从我的代码活动中调用EXE文件(单独的进程),因为你永远不知道会发生什么(不太可靠)。

所以我想也许PNGGauntlet会是一个选择。但是快速查看安装的应用程序,它只是一个c# GUI,调用二进制文件pngout.exe。那正是我不想做的。

所以我的问题是这个:是否有一个开源和/或免费的。net库(DLL),做PNG压缩?

托管PNG优化库可用

我刚刚找到了这个:nQuant。从项目页面:

nQuant是一个。net颜色量化器,可以产生高质量的256色8位PNG图像。nQuant通常将32位图像的大小减小到a尺寸比原来小3倍,质量超过原来标准的C命令行实用程序生成。

我已经用一些样本png测试了它,它确实产生了一个很好的8位输出,比。net自己的8位编码器小,没有明显的抖动,即使是抗锯齿图像。然而,我遗漏了一件事:处理可能有点慢,但不幸的是,库没有并行化的优化代码变体。我正在想办法解决这个问题。

UPDATE(2013年1月21日),我已经重构了代码,它现在运行速度快了10倍,即使没有并行线程。分叉在这里:http://nquant.codeplex.com/SourceControl/network/forks/breki74/nQuantFaster

UPDATE(2013年2月24日),我的分叉被合并到主干。享受。

万一你决定写自己的c#代码:我写了一个开源的纯Java PNG编码/解码器,PNGJ,你可能会发现它很有用;移植到c#应该不难。它只是一个编码器,而不是一个优化器,但它支持所有的写作选项/策略(包括每行不同的过滤器),所以你可以很容易地将你的启发式插入它。

更新:我已经编写了一个c# PNG编码器/编码器PngCs,从Java (PngJ)移植,它是开源的,自2012年12月以来,它支持所有PNG变体(除了它不写隔行PNG,只读取它们)

我在Google上搜索了一下,最近在StackOverflow上发现了一两个这样的问题,我不相信有一个c#库可用。

然而,OptiPNG是开源代码的C代码,所以移植到c#是可能的。或者,将C代码拉出到exe之外的单独库中,并将P/Invoke放入其中。

周围似乎有其他开源库,不一定是专门用于优化的:

http://www.libpng.org/pub/png/pngcode.html

很抱歉没有达到高潮,我也一直在寻找其中的一个,我得出的结论是目前的答案是不存在的。

根据这个答案,有几个。net库可以用来优化png的大小

我用来优化png的工具有:

  1. 转换为png8:如果颜色很少(比如截图),那么我使用[pngnq][2]或Gimp的索引颜色模式将其量化到256种颜色。Png8可以小于png24或png32。详见[PNG8 - The Clear Winner][3]。
  2. optiping,一个快速的通用png优化器。[c# PNG优化教程][9]详细介绍了如何从c#中运行选项。
  3. 最后[pngout][4]是缓慢的,但往往(80-90%的时间)设法压缩png进一步比选择。不过先运行optiping,因为optiping会自动执行pngout不会尝试的其他优化。