管理的PNG优化库可用吗?
我希望在我的构建(TFS 2010 Build Workflow)中构建PNG优化(各种PNG“sqeezer / squisher”)。 我想创建一个新的构建活动,就像我的所有活动一样,我更喜欢将所有代码都管理好几乎没有依赖。
我搜索过(谷歌搜索)并发现许多不同的PNG库用于PNG优化。 PNGOUT,PNGCRUSH,OptiPNG等等。它们都不是.NET。 它们看起来都很棒。 我不想从我的代码活动中调用EXE文件(单独的进程),因为你从未真正知道会发生什么(不太可靠)。
所以我想也许PNGGauntlet会是一个选择。 但是快速查看已安装的应用程序,它只是一个调用二进制pngout.exe的C#GUI。 这正是我不想做的事情。
所以我的问题是 :是否有一个开源和/或免费的.NET库(DLL)进行PNG压缩?
我刚发现了这个: nQuant 。 从项目页面:
nQuant是一种.net颜色量化器,可生成高质量的256色8位PNG图像。 nQuant经常将32位图像的大小减小到比原始图像小3倍的尺寸,质量超过标准C命令行实用程序产生的质量。
我用一些样本PNG测试了它,它确实产生了一个好的8位输出,比.NET自己的8位编码器小,并且没有可见的抖动,即使对于抗锯齿图像。 但我错过了一件事:处理可能有点慢,但遗憾的是,库没有优化代码的并行化变体。 我正在为此制定解决方案。
更新 (2013年1月21日),我重构了代码,现在运行速度提高了10倍,即使没有并行线程。 叉子在这里: http : //nquant.codeplex.com/SourceControl/network/forks/breki74/nQuantFaster
更新 (2013年2月24日),我的分叉合并到主干。 请享用。
如果您决定编写自己的C#代码:我已经编写了一个开源的纯Java PNG编码器/解码器, PNGJ ,您可能会发现它很有用; 移植到C#应该不难。 它只是一个编码器,而不是优化器,但它支持所有写入选项/策略(包括每行的不同filter),因此您可以轻松地将启发式插入其中。
更新:我编写了一个C#PNG编码器/编码器PngC ,从Java( PngJ )移植,它是开源的,自2012年12月起它支持所有PNG变体(除了不写隔行PNG,只读取它们)
经过相当不错的谷歌搜索并最近在StackOverflow上发现了其中一个或两个问题,我不相信有一个C#库可用。
但是,OptiPNG是开源C代码,因此移植到C#是可能的。 或者,将C代码拉出到exe和P / Invoke之外的单独库中。
似乎有其他开源库,不一定专门用于优化:
http://www.libpng.org/pub/png/pngcode.html
对于反高潮的道歉,我一直在追求其中一个,我得出的结论是,目前的答案是不存在的。 我急切地等待纠正。
根据这个答案 ,有几个.net库可用于优化png大小
我用于png优化的工具是:
- 转换为png8:如果颜色很少(比如截图),那么我使用[pngnq] [2]或Gimp的索引颜色模式来量化低至256色。 Png8可以小于png24或png32。 有关详细信息,请参阅[PNG8 – The Clear Winner] [3]。
- Optipng ,快速通用png优化器。 [C#PNG优化教程] [9]详细介绍了如何从C#运行optipng。
- 最后[pngout] [4]很慢,但经常(80-90%的时间)设法将png压缩得比optipng更低。 首先运行optipng,因为optipng会自动执行pngout不会尝试的其他优化。
- 没有使用reflection的运行时C#“找不到方法”exception
- 服务器可以处理的FileSystemWatcher实例数量有哪些实际限制?
- 如何在SQL Server 2008中将Excel文件插入/检索到varbinary(max)列?
- 使用reflection,在已存在的对象上调用Field的方法
- 如何在C#中为测量单位创建通用转换器?
- 从WebRequestMethods.Ftp.ListDirectoryDetails中提取文件名
- 查询XmlDocument而不会得到“未定义名称空间前缀”问题
- 什么事件在DataGridViewCell中的combobox中捕获了值的变化?
- 表值参数问题与MONO cs