<rmcreative>

RSS

CLIO: command line image optimizer 1.0

8 апреля 2011

До недавнего времени для оптимизации изображений я пользовался, в основном, smush.it, иногда чередуя его с Google Page Speed. И тут возникла необходимость оптимизировать процесс: понадобилось оптимизировать около 300 изображений.

Так появился данный набор, умеющий жать PNG/JPEG. На вход optimize.bat подаётся директория, из неё рекурсивно выбираются все изображения и обрабатываются идущими в комплекте утилитами. Отрабатывает за приемлемое время, даёт лучшие результаты, чем оптимизатор из Google Page Speed и smush.it.

Пользуемся

Комментарии и предложения очень приветствуются.

Комментарии RSS

  1. №4315
    Porcelanosa
    Porcelanosa 08 апр. 2011 г., 15:25:42

    а gif совсем умер? Нельзя ли при нахождении gif конвертировать в png? На чем основан алгоритм сжатия?

  2. №4316
    stewardtz
    stewardtz 08 апр. 2011 г., 15:34:53

    У Чикуёнка почитайте про оптимизацию png изображений - там у него пара ссылок есть на программки из коммандной строки (в тючю и пакетная обработка) + Пепелсбей в своё время много про это писал.

  3. №4317
    Sam
    Sam 08 апр. 2011 г., 15:53:07

    Porcelanosa, gif — да, фактически умер. В нём только анимация жива осталась. Конвертировать можно, но это небезопасно т.к. нужно будет ещё переписать все ссылки на эти изображения в CSS/HTML. Если картинки автоматом сконвертятся — можно забыть.

    Всё сжатие без потерь. Для JPEG производится оптимизация таблиц Хаффмана + выкидывается всё ненужное: exif, цветовые профили и т.д. Для PNG опять же выкидывается ненужная информация. Затем, если цветов меньше 256, пробуем конвертировать PNG24 в PNG8, все лишние цвета выкидываем. Ну и после пережимаем получившиеся данные более оптимальным алгоритмом deflate.

    stewardtz, у Сергея Чикуёнка очень хорошие статьи про ручной подгон изображения под оптимизацию, но, к сожалению, времени на такую ручную обработку частенько нет.

  4. №4318
    Юрий
    Юрий 08 апр. 2011 г., 16:10:28

    С твитера ссылку поправь, после точки 0 съело) За оптимизатор спасибо!

  5. №4319
    pepelsbey
    pepelsbey 08 апр. 2011 г., 16:11:54

    Вот тоже хорошая штука, но работает только на макоси: ImageOptim — может быть можно её как-нибудь запустить под Windows в командной строке?

  6. №4320
    Чистяков Денис
    Чистяков Денис 08 апр. 2011 г., 16:17:21

    Рекомендую посмотреть в сторону: http://github.com/banzalik/imgcomp — почти серебряная пуля, подхватывает множество форматов и с обработкой по шаблонам все ок. Под виндой правда не завести.

  7. №4321
    Sam
    Sam 08 апр. 2011 г., 16:22:19

    pepelsbey, сомневаюсь, что это реально.

    Чистяков Денис, я под виндой, как и многие-многие разработчики. imgcomp интересный. Работает быстро?

  8. №4322
    Рустам
    Рустам 08 апр. 2011 г., 16:29:21

    Как раз видел в недавнем коммите в yii изменения картинок. На части маленьких картинах размер не убавился, а наоборот вырос (это крохи байтов: 120 -> 144 bytes). Но может сделать проверку: если после преобразования размер вырос, то оставлять оригинал? Это было бы идеологически правильней, ведь мы делаем преобразования для уменьшения размеров.

  9. №4323
    Porcelanosa
    Porcelanosa 08 апр. 2011 г., 16:33:57

    И кстати, он старые файлы оставляет, мало ли что.

  10. №4324
    Чистяков Денис
    Чистяков Денис 08 апр. 2011 г., 16:38:26

    Sam, вообще на сколько я понимаю у твоего решения и imgcomp много общего он так же использует существущие решения и подбирает нужное в зависимости от типа файла, понравились гибкость, подробная информация о ходе оптимизации и о том что было именно применено и большое колличество режимов.

    Используемые библиотеки: imagemagick, pngout, optipng, pngrewrite, exiftool, advpng, jpegtran, gifsicle, pngnq.

  11. №4325
    Sam
    Sam 08 апр. 2011 г., 17:45:04

    Чистяков Денис, ну да, принцип тот же: запустить кучу тулз последовательно для разных файлов. imgcomp, конечно, более взрослый.

    Набор утилит немного разный: у меня не используется exiftool, imagemagick, advpng (оттуда только deflate используется в виде advdef), pngout (не быстро и разница не критичная), pngnq (т.к. автоматически это делать — зло), gifsicle (опять же автоматом опасно, иногда анимацию портит).

  12. №4326
    Константин
    Константин 08 апр. 2011 г., 22:30:03

    посмотрл, занятно.

    сам, кстати, на линухе сижу, так что... )))

    посмотрел на imgcomp... (вдруг там что-нить ещё найду?)

    у меня в общем-то то же самое выполняется собственным чуть перепиленым скриптом. разве что ещё иногда наложение водяных знаком им же устраиваю.

    ... всё-таки, скриптовые решения - самые гибкие получаются )))

  13. №4327
    Ekstazi
    Ekstazi 08 апр. 2011 г., 22:55:04

    Круто, не думал что ты так агрессивно жмешь эти картинки. Хорошое решение.

  14. №4328
    Psih
    Psih 09 апр. 2011 г., 0:46:13

    http://punypng.com/ А как по сравнению с твоей этот сервис? Они очень даже хорошо жмут, свой алгоритм у них. Пока лучшего не видел.

  15. №4329
    Sam
    Sam 09 апр. 2011 г., 1:10:42

    Psih, PNG мой наборчик жмёт чуть лучше, в отличие от JPEG. Интересно, что они с ним делают… jpegtran вроде вырезает всё, что можно вырезать без потерь. Плюс на одной PNG-шке из моего тестового набора punypng споткнулся.

  16. №4330
    Psih
    Psih 09 апр. 2011 г., 1:45:14

    Sam

    Насколько я читал, они делают анализ изображения и оптимизируют его кодирование. В общем какие-то свои наработки у них. Но жмёт хорошо.

    Попробую твоё, посмотрим что будет :)

  17. №4331
    Ekstazi
    Ekstazi 09 апр. 2011 г., 11:29:28

    Sam, а может добавить многопоточность ?)) Я делал её через start...

  18. №4332
    Sam
    Sam 09 апр. 2011 г., 14:27:42

    Ekstazi, если покажешь как — буду признателен.

  19. №4333
    dva
    dva 09 апр. 2011 г., 18:39:42

    @Чистяков Денис А imgcomp под cygwin - не пробовали завести?

  20. №4334
    Чистяков Денис
    Чистяков Денис 09 апр. 2011 г., 19:32:53

    @dva нет, не было необходимости, т.к. уже почти 2-а года работаю в убунте )

  21. №4335
    Ekstazi
    Ekstazi 09 апр. 2011 г., 23:09:41

    Ох, реализовать не смогу, не хватит времени, подсказать могу только, ниже исходники многопоточного пингера подсети:

    @echo off
    for /l %%i in (1,1,254)  do start /b /separate cmd /C (ping 192.168.193.%%i -w 15 -n 1)| find "Reply"
    pause

    Думаю идея ясна, можно совместить все в одном батнике при этом вызывая из него определенную процедуру для сжатия с переданным параметром - именем файла, а когда вспомогательный параметр не передан, то проходится по всем файлам в каталоге и вызывать самого себя для оптимизации. Как-то так.

  22. №4342
    mantra
    mantra 11 апр. 2011 г., 10:00:36

    На вход optimize.bat подаётся директория

    скажите плз, как это сделать?

  23. №4343
    Sam
    Sam 11 апр. 2011 г., 12:20:07

    mantra,

    cd path/to/clio
    optimize path/to/optimized/dir
    
  24. №4344
    mantra
    mantra 11 апр. 2011 г., 12:24:48

    спс

  25. №4640
    banzalik
    banzalik 13 мая 2011 г., 18:33:50

    Коль уж в этом треде есть живые пользователи imgcomp, то я с удовольствием выслушаю ваши пожелания, багрепорты и фичреквесты

  26. №4642
    Sam
    Sam 14 мая 2011 г., 1:36:29

    banzalik, его под cygwin можно пустить?

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.