Инструменты оптимизации PNG

Некоторое время назад я использовал службу оптимизации PNG, которая называется (я думаю) "замять это". Вы передали ему веб-ссылку, и он вернул почтовый индекс всех изображений PNG с их размерами файлов, ну, в общем, улыбнулся...

Я хочу реализовать аналогичную функцию оптимизации как часть процесса загрузки изображений на моем сайте; Кто-нибудь знает о существующей библиотеке (желательно PHP или Python), к которой я могу подключиться? Краткий Google указал мне на несколько инструментов стиля командной строки, но я бы не хотел идти по этому пути, если это возможно.

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

Пока ваш 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 не стоит столько ресурсов процессора, сколько раньше.

Вы слышали о PNGCrush? Вы можете проверить исходный код, часть инструментов PNG и MNG на SourceForge, и записать или обернуть его в Python.

Я бы поставил под сомнение целесообразность отбрасывания других чанков (например, 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))

Функция ical_chunks по существу отфильтровывает все, кроме критических фрагментов PNG (четырехбуквенный тип для критического фрагмента начинается с заглавной буквы).

Другие вопросы по тегам