PNG优化工具

时间:2010-01-03 02:03:29

标签: php python optimization png

前段时间我使用了一种称为(我认为)“刷它”的PNG优化服务。你给它一个网络链接,它返回了所有PNG图像的拉链,其文件大小很好,很好,微笑......

我想在网站的图片上传过程中实施类似的优化功能;有没有人知道我可以利用的预先存在的库(PHP或Python)?一个简短的谷歌已经指出了几种命令行风格的工具,但如果可能的话,我宁愿不去那条路线。

4 个答案:

答案 0 :(得分:14)

使用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

答案 1 :(得分:3)

只要您的PHP使用GD2支持编译(现在很常见):

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

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

今天它可能比几年前用得少;大多数图像编辑器已经这样做了,因为gzipping的成本并不像以前那么高。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我会质疑抛弃其他块(例如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个字母类型以大写字母开头)。