-
Пакетная оптимизация PNG
В последнее время все чаще и чаще слышу советы запускать какую-нибудь утилитку оптимизации графики вроде OptiPNG на всей папке с картинками, чтобы не запариваться и одним махом ужать все файлы. Например, вот так:
optipng -o5 *.png
Создают даже целые сервисы вроде smush.it.
Так вот, лично я никогда не пользовался такими советами. И пока не рекомендую делать этого ребятам, которые действительно хотят качественно оптимизировать графику. По одной простой причине: «меньше» не всегда значит «лучше».
Что бы не говорили злые языки, но доля IE6 на рынке все еще слишком велика, чтобы сбрасывать его со счетов. Именно у этого браузера больше всего проблем с отображением разных вариаций PNG. В частности, полноцветный полупрозрачный PNG (PNG24 в терминологии фотошопа) он просто так не покажет, нужно использовать фильтр AlphaImageLoader или VML. А у полупрозрачных индексированных PNG покажет только непрозрачные пиксели. Из этого следует вывод, что нужно контролировать оптимизацию каждого файла.
Рассмотрим несколько примеров. Для начала возьмем полупрозрачную плашку:
…и вызовем на ней OptiPNG:
optipng -o5 mate.png
Он нам скажет, что самым оптимальным способом хранения этого изображения будет 8-битная палитра. Но так как на этой картинке нет ни одного непрозрачного пикселя, то в IE6 не отобразится вообще ничего. Поэтому для данного изображения нужно отключить оптимизацию по цвету:
optipng -o5 -nc mate.png
Рассмотрим второй пример:
При попытке оптимизировать этот файл OptiPNG преобразует изображение в 8-битную палитру, однако это будет не оптимальный способ хранения изображения и вы увидите сообщение, что файл уже оптимизирован. Но я готов пожертвовать «гладкими» краями в IE6, лишь бы не извращаться с фильтрами и VML, потому что этот файл будет использоваться 50 раз на странице. Кто не в курсе: AlphaImageLoader жрет очень много памяти и процессорного времени, VML менее требователен, но все равно больше, чем обычная картинка или фон. Поэтому в данном случае нужно форсировать преобразование палитры:
optipng -o5 -force corner.png
Еще одним плюсом ручной оптимизации для меня является соответствие моих ожиданий действительности. Очень часто при сохранении черно-белых PNG я забывают выставить им режим цветовой Grayscale, а лог OptiPNG постоянно мне об этом напоминает, когда процент сжатия меньше 20. Кстати, smush.it не умеет преобразовывать цветовую палитру в черно-белую.
12 комментариев
«создам-ка я робота, чтобы создавал за меня роботов» 🙂
А что насчёт ImageOptim? 😉
http://pornel.net/imageoptim/en
Идея с ImageOptim очень хороша, но мне, как гику оптимизации, не хватает возможности задать параметры оптимизации (что описал в посте) и лога — что именно было сделано с изображением.
Менее гикнутым 🙂 можно пользоваться «аналогом» ImageOptim’а для винды: http://sapegin.ru/picturebeaver
Спасибо за упоминание OptiPNG, раньше юзал Pngnq, частенько вылезали косячки всякие мелкие, OptiPNG попробовал — вроде бы пока не вылезло ни одного.
Для Windows есть довольно неплохая http://brh.numbera.com/software/pnggauntlet/ , с GUI 🙂
Т.к. обычно я делаю всё же не сильно большие сайты, все проблемы файлов сразу видно на глаз — можно поправить сразу же. Впрочем, в случае жирных PNG всё равно без ручной чистки «невидимых пикселей» не обойтись, а у большинства выигрыш небольшой совсем.
Кстати немаловажный момент, при сохраненим png в Image Magick (например нужно сделать thumb), по умолчанию устанавиливается палитра изображения в 16 бит. При попытке обработать такой файл, optipng и другие обработчики не дадут никакого результата.
После каждой манипуляции в ImageMagick нужно принудительно выставлять глубину в 8 бит, сохранять и потом использовать обработчики. Ну и размер в 8бит будет почти в два раза меньше.
Спасибо, Сергей!
Я только хотил упоменать (извини меня для плохой язьк 🙂 ) что смуш.ит пользвает командной «тул» pngcrush для оптимизация ПНГ.
$ pngcrush -rem alla -brute in.png out.png
—
And great job on the JPEG post for Smashing Magazine!
Best,
Stoyan
Thanks, Stoyan 🙂 And I do remember that smush.it uses
pngcrush
. Maybe you should switch tooptipng
instead (I know it’s slower)? And add option to preserve image type (like «truecolor with transparency») for IE6.Не знаю как все, а я не могу жить без проги под названием Wiseval Photophant. Она во первых бесплатная, простая, может накладывать водные знаки, уменьшать размер изображения, и самое главное,- пакетно сжимать из одного формата в другой.
Здравствуйте Сергей.
В первую очередь хотелось вас поблагодарить за то что вы делитесь столь подробной и нужной информацией с читателями вашего блога. Мне очень понравилась статья «Фотошоп для веб-разработчика. Кнопочки» Давно очень хотел проделать подобное но познания в фотошопе не позволяли это сделать, а вам большое спасибо за проделанную работу.
А теперь по теме 🙂
Вот недавно прочел этот пост и начал пробовать использовать разные варианты оптимизации картинок, и нашел вот эту программку http://x128.ho.ua/color-quantizer.html , испробовав немного ее я был очень удивлен как неплохо она сжимает. Хотелось бы у вас узнать, как вы оцениваете ее работу?
Tosha, оценить не могу, так как работаю на Маке. Но лично я давно ищу программу, которая могла бы снижать количество цветов до заданного значения (больше 256), что и делает эта программа.