【问题标题】:PNG optimisation toolsPNG优化工具
【发布时间】:2010-12-31 21:49:26
【问题描述】:

不久前,我使用了一个名为(我认为)“smush it”的 PNG 优化服务。你给它提供了一个网络链接,它返回了所有 PNG 图像的 zip,它们的文件大小很好,很好,弄脏了......

我想在我的网站图片上传过程中实现类似的优化功能;有谁知道我可以为此利用的预先存在的库(最好是 PHP 或 Python)?简短的 Google 向我指出了几种命令行样式工具,但如果可能的话,我宁愿不走这条路。

【问题讨论】:

  • 我认为任何流行的工具(optipng、pngcrush 等)都没有绑定。 ImageMagick(用于 PHP)和 PIL(用于 Python)将通过调整输出设置来帮助您到达某个地方,但命令行工具的优化程度更高。

标签: php python optimization png


【解决方案1】:

只要你的 PHP 编译时支持 GD2(现在很常见):

<?php
$image = imagecreatefromstring(file_get_contents('/path/to/image.original.png'));
imagepng($image, '/path/to/image.smushed.png', 9);

这将以 GD2 可以理解的任何图像格式(不仅仅是 PNG)读取,并在不牺牲质量的情况下输出压缩为最大压缩级别的 PNG。

不过,今天它的用处可能比几年前少;大多数图像编辑器已经这样做了,因为 gzipping 在 CPU 方面的开销不像过去那样多。

【讨论】:

  • 谢谢,但我追求的不仅仅是 gzipping,即删除颜色校正和伽马信息。
  • 虽然我同意除了简单压缩之外还有其他优化技术,但按照您的要求做的不是优化,而是破坏上传的图像。
  • 呸!语义! :) 作为正确的一点:我要问的不是以任何方式破坏图像,而是通过破坏某些(不必要的)信息来优化图像。
  • 所有网络浏览器现在都支持颜色配置文件和伽玛校正。如果有人将图像上传到 Flickr,并且在每个 Web 浏览器上看起来都是正确的,那么他们将其上传到您的网站,并且由于您剥离了颜色配置文件而看起来全都褪色了,猜猜他们会怪谁?不想学究气或正直,只是不确定您是否意识到这一点。
  • 不用担心;好点子。目前,我正在赌一把/判断我的用户上传的照片不会有显着的伽马/颜色配置文件变化。
【解决方案2】:

你听说过PNGCrush吗?你可以查看源代码,PNG and MNG Tools at SourceForge 的一部分,然后用 Python 转录或包装它。

【讨论】:

  • PNGcrush 比任何纯 Python 解决方案都快,并且在 Python 中调用外部程序很容易。最明显的缺点是如果你的操作系统产生一个新进程的成本非常高,例如窗户。
  • 我有点怀疑,不管你的操作系统如何,为每个文件上传生成一个新进程是个好主意。
【解决方案3】:

我会质疑丢弃其他块(如 gAMA 和 iCCP)是否明智,但如果您想这样做,使用 PyPNG 删除块相当容易:

#!/usr/bin/env python
import png
import sys

input=sys.stdin
out=sys.stdout

def critical_chunks(chunks):
    for type,data in chunks:
        if type[0].isupper():
            yield type,data

chunks = png.Reader(file=input).chunks()
png.write_chunks(out, critical_chunks(chunks))

critical_chunks 函数本质上是过滤掉除关键 PNG 块之外的所有块(关键块的 4 个字母类型以大写字母开头)。

【讨论】:

  • 这不会改变 zlib 压缩,因为它通过原样通过块。
【解决方案4】:

用PHP这个命令行工具执行

  pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB -brute -l 9 -max -reduce -m 0 -q IMAGE
  optipng -o7 -q pngout.png
  pngout pngout.png -q -y -k0 -s0
  advpng -z -4 pngout.png > /dev/null

【讨论】:

  • 嘿,已经 6 年了,但我注意到您在线,所以 - 这些工具列表不错。你能列出所有 png/jpg 和类似的压缩工具吗?我只需要一份你使用/喜欢什么的名单,因为这些工具很好,我怀疑你可能会在 6 年内找到更好的东西:) 提前致谢。很好的回复。
猜你喜欢
  • 2011-11-15
  • 1970-01-01
  • 2012-08-11
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多