管理的PNG优化库可用吗?

时间:2011-09-09 14:12:18

标签: c# .net png

我希望在我的版本(TFS 2010 Build Workflow)中构建PNG优化(各种PNG“sqeezer / squisher”)。我想创建一个新的构建活动,就像我的所有活动一样,我更喜欢将所有代码都管理好几乎没有依赖。

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

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

所以我的问题是这个:是否有开源和/或免费的.NET库(DLL)进行PNG压缩?

4 个答案:

答案 0 :(得分:25)

我刚发现了这个: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

更新(2013年2月24日),我的fork已合并到主干。享受。

答案 1 :(得分:11)

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

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

答案 2 :(得分:7)

经过相当不错的谷歌搜索并最近在StackOverflow上发现了其中一个或两个问题后,我认为没有可用的C#库。

然而,OptiPNG是开源C代码,因此移植到C#是可能的。或者,将C代码拉出到exe和P / Invoke之外的单独库中。

似乎还有其他开源库,不一定专门用于优化:

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

对于反高潮的道歉,我一直在追逐其中一个,我得出的结论是,目前的答案是不存在的。我急切地等待纠正。

答案 3 :(得分:-1)

根据this answer,有几个.net库可用于优化png大小

  

我用于png优化的工具是:

     
      
  1. 转换为png8:如果颜色很少(比如屏幕截图),那么我使用[pngnq] [2]或Gimp的索引颜色模式来量化低至256色。 Png8可以小于png24或png32。有关详细信息,请参阅[PNG8 - 明确的获胜者] [3]。
  2.   
  3. Optipng,快速通用png优化器。 [C#PNG优化教程] [9]详细介绍了如何从C#运行optipng。
  4.   
  5. 最后[pngout] [4]很慢,但经常(80-90%的时间)设法将png压缩得比optipng更低。首先运行optipng,因为optipng会自动执行pngout不会尝试的其他优化。
  6.