【问题标题】:Managed PNG Optimization Library Available? [closed]托管的 PNG 优化库可用吗? [关闭]
【发布时间】:2011-11-13 20:19:45
【问题描述】:

我希望在我的构建(TFS 2010 构建工作流程)中构建 PNG 优化(一种 PNG “sqeezer/squisher”)。我想创建一个新的构建活动,并且与我的所有活动一样,我更喜欢在几乎没有依赖关系的情况下管理我的所有代码。

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

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

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

【问题讨论】:

  • 你试过madskristensen.net/post/… 吗?它不是一个真正的库,但我发现与 VS 集成很好。
  • 不是纯 C# 解决方案,但请参阅 stackoverflow.com/q/2075084/2291 了解 Issa 所谈论的一些外部程序。
  • 这是一个老旧的 OT(或者过去被称为“不具建设性”)的问题,观点低。而不是关闭我刚刚删除。不能保证它会挂很长时间(系统会在一段时间后自动删除这些,不确定算法),但如果你有链接,你应该总是能够到达这里,所以我建议你收藏它。
  • @Will 它只是从未被标记为已解决。现在它被标记了。你能取消持有吗?谢谢!
  • @IssaFram 抱歉,我们关闭了这些永久物。我们可能(最终)很慢,但正如您从密切的原因(不是自定义!)中看到的那样,我们在这里积极地劝阻这些类型。请以这里明显缺乏垃圾邮件(在达到 10k 之前您不会看到大量垃圾邮件)作为说明为什么这是政策。

标签: c# .net png


【解决方案1】:

我刚刚找到了这个: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 日),我的前叉已合并到后备箱。享受吧。

【讨论】:

  • 很棒的图书馆!它也在nuget上。安装包 nQuant
  • 谢谢伊戈尔,你的代码很好。
【解决方案2】:

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

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

【讨论】:

  • 我将第一个承认图像编码/解码和优化领域绝对不是我的专业领域。这很适合以后做,但我的需求对时间更敏感。不过谢谢。
  • 哈哈有人在这个问题之后不久就开始了这个......code.google.com/p/pngcs
  • @IssaFram 有人就是我 :-)
  • 感谢上帝,您这样做了。 :-)
  • 如果您使用本机 zip 功能或开源 zlib(纯 c#)库之一而不是 ICSharpCode.SharpZipLib.dll 会很酷。对于那些迟到的人,@leonbloy 有一个位于此处的 github repo > github.com/leonbloy/pngcs
【解决方案3】:

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

但是,OptiPNG 是开源 C 代码,因此可以移植到 C#。或者,将 C 代码拉出到 exe 之外的单独库中,然后 P/Invoke 进入其中。

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

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

为反高潮道歉,我也一直在追求其中之一,我得出的结论是当前的答案是不存在的。我急切地等待被纠正。

【讨论】:

    【解决方案4】:

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

    我用来优化png的工具有:

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

    【讨论】:

    • 看起来您缺少几个链接,此外,OP 明确表示他们不想使用 3rd 方工具(如 exe 等),并且优化器必须 开源并用 C# 编写。简单地运行任意 3rd 方 exe,显然不是“纯 c#”解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多