Инструменты оптимизации PNG
В то время как я использовал услугу оптимизации PNG, называемую (я думаю), "smush it". Вы загрузили веб-ссылку, и она вернула zip всех изображений PNG с их файлами, красиво, хорошо, smushed...
Я хочу реализовать аналогичную функцию оптимизации как часть процесса загрузки изображений на моем сайте; кто-нибудь знает о существовавшей ранее библиотеке (желательно PHP или Python), к которой я могу воспользоваться? Краткий Google указал мне на несколько инструментов стиля командной строки, но я бы предпочел не пойти по этому маршруту, если это возможно.
Ответы
Ответ 1
Выполнить с помощью 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
Ответ 2
Пока ваш 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 не стоит столько же процессорных, сколько и раньше.
Ответ 3
Слышали ли вы о PNGCrush? Вы можете проверить источник, часть PNG и MNG Tools в SourceForge, а также переписать или обернуть его в Python.
Ответ 4
Я бы поставил под сомнение мудрость выбрасывать другие куски (например, 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-буквенный тип для критического фрагмента начинается с прописной буквы).