Как стать автором
Обновить

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

Качество при этом всем не теряется?
В основе формата лежит сжатие без потерь. Так что если принудительно цветовую палитру не потрошить — никаких потерь качества не будет.
Круто, спасибо, не знал. =)
Нет, разработчики заявляют что все остается как было.
По моим субъективным оценкам тоже ничего не теряется.
Хотя для фотографий наверно лучше использовать старый JPEG или PNG24.
Image-Mode-Indexed — качество теряется, если в исходной картинке было больше 256 цветов. Например, пара-тройка разноцветных градиентов.
Под 256 цветами понимается стандартная палитра или же просто изображение не сможет содержать более 256 цветов? (оттенков серого например)
Что собой представлет «стандартная 256-цевтовая палитра»?
256 цветов при выборе количества цветов экрана например. Я правильно понимаю что разговор не об этом и в формате файла просто установлено ограничение на количество цветов в палитре?
Да, просто цвет кодируется 1 байтом (вместо 3х или 4х), что дает 256 цветов.
А палитра получается индивидуальная для каждого png-файла, и хранится в нем вместе с картинкой.
+вроде бы в PNG возможны варианты кодирования цвета меньшим числом бит, соответственно уменьшается и палитра.
просто больше 256 цветов.
Пользуюсь PNGOut, можно поставить как плагин к Photoshop. Сжимает раза в 2-3.
Сжимает лучше чем стандартный модуль Photoshop?
Если верить ALS, то да, почитать можно тут.
НЛО прилетело и опубликовало эту надпись здесь
Охотно верю. В старых версиях Photoshop была какая-то странная ошибка, которая значительно увеличивала размер файла.
НЛО прилетело и опубликовало эту надпись здесь
Попробуйте поставить их горизонтально и проделать ту же процедуру — думаю результат будет.
Все-таки нехорошо дискриминировать людей по используемой системе контроля пакетов. Можно было и ссылки на домашние страницы OptiPNG и AdvanceCOMP дать.
Сделал ссылки, спасибо за подсказку!
Для FreeBSD

OptiPNG:
инсталлировать из порта: cd /usr/ports/graphics/optipng/ && make install clean
или
инсталлировать из пакета: pkg_add -r optipng

AdvanceCOMP:
инсталлировать из порта: cd /usr/ports/archivers/advancecomp/ && make install clean
или
инсталлировать из пакета: pkg_add -r advancecomp
Спасибо за дополнение, исправил.
Похоже, что автор советов не понимает, как png работает, и советы дает эмпирические какие-то. Ну да, оптимизатор png использовать — это правильно и полезно.

Совет номер 1 — бред. В лучшем случае способ сжатия png (выбранный алгоритм) по умолчанию в какой-то программе. Или вообще какая-то психология, основанная на смутных воспоминаниях о том, что гиф градиенты вертикальные сжимать не умеет. С учетом последующего применения optipng какого-нибудь размеры файлов окажутся примерно одинаковыми. Отличия будут уже из-за особенностей конкретных картинок, удачности (с точки зрения алгоритмов png) цветовых переходов на стыках, и результат может оказаться как в пользу горизонтального изображения, так и в пользу вертикального.

Совет номер 2 — ничего не сказано про то, что это может оказаться сжатием с потерями. Насжимают начинающие верстальщики пнг с несколькими градиентами разных цветов в indexed mode, получат бяку. Догадайтесь почему называется.
Похоже вы не обратили внимания на упоминание редактора Gimp…
И что? В любом случае, независимо от того, используется ли GIMP, Photoshop, MS Paint или любой другой редактор, нет смысла располагать картинки горизонтально, если потом жать все с помощью OptiPNG.
Как это ни странно, но:
1. Создайте в GIMP изображение 800x100px и разрисуйте его равномерно (у меня получилось на 9.9Кб). Сохраните (hgimp.png).
2. Поверните это изображение на 90 градусов (у меня получилось 12.9). Сохраните (vgimp.png).
3. После обработки OptiPNG и AdvanceCOMP
hgimp.png=9.5Кб
vgimp.png=12.4Кб

Обратите внимание, что это еще не самый удачный пример, иногда разница бывает гораздо больше. Я говорю только о редакторе Gimp.
Есть PngOptimizer для Windows. Оптимизирует PNG, GIF, BMP и TGA файлы.
Ночью погонял optipng, pngout, advpng и pngcrush. Точной статистики с красивыми графиками и цифрами давать не буду, ибо каждой утилитой посжимал около 200 очень разношерстных изображений, от скриншотов окон и 2-3 цветных логотипов до скриншотов игр и фильмов\аниме. Вот к какому выводу я пришел:

pngcrush — явный аутсайдер, pngcrush -brute image.png заметно проигрывал всем остальным по степени сжатия и в скоре я его вообще исключил из тестирования. Если это результат слабого чтения манов и неоптимальных опций — милости прошу со сравнительными результатами.

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

advpng — что-то странное. Во первых работает на порядок быстрее остальных. Во вторых степень оптимизации варьируется что называется от плюс до минус бесконечности, то выдаст результат в 2-3 раза больший по размеру, чем всех конкурентов, то уже оптимизированные изображения, за сущие байты которых сражались optipng и pngout врдуг волшебным образом уменьшит еще на 10%.

pngout — самая интересная утилита из всего набора.
Во первых в ней используется собственный алгоритм deflate-сжатия, не использующий zlib, от сюда, по видимому и результат: стабильно сжимает уже оптимизированные optipng изображения еще на 5-10%.
Во вторых имеет интересную опцию "-r Randomized initial tables (good for many trials with same options)", которая, как следует из описания может, и в основном таки уменьшает изображение за несколько повторных попыток оптимизации с разными начальными таблицами.
Главные недостатки pngout: не умеет автоматически уменьшать количество цветов изображения и подбирать правильный png фильтр.

Из всего этого я вывел для себя оптимальный вариант получить ближайший к максимальному уровень оптимизации в автоматическом режиме, простой код на bash:

for i in *.png; do
optipng -o7 "$i" # начальная оптимизация изображения, уменьшение цветности и подбор правильного фильтра
pngout -r -ks "$i" # 3 прохода pngout
pngout -r -ks "$i" # с сохранением опций фильтра и цветности
pngout -r -ks "$i" # для получения лучшего результата
advpng -z4 "$i" # скорее всего не поможет, но учитывая то, что работает очень быстро и иногда выдает «чудеса» оптимизации — пусть будет
Не поверите — но pngcrush можно использовать для сжатия Png… в реальном времени.
максимум сжатия — 30-40%, за 10-40 мсек

а вот optipng уже в два раза медленее работает, хоть и сжимает на 5-10% лучше…

Что собой представляет «сжатие png в реалньом времени»? В реальном времени можно кодировать видео, звук, но не изображение.
подразумевается возможность уменьшения размера изображения при отдаче ее клиенту без серьезных задержек…
эмм, а можно пример использования сжатия именно перед отправкой изображения, а не при его создании\помещении в ахрив? Онлайн-рисовалка с возможностью сохранить свою мазню?
>>Онлайн-рисовалка с возможностью сохранить свою мазню?
угадали!! wikimapia
И зачем карты динамически оптимизировать именно перед отправкой клиенту? Этим надо заниматься во время поступления карт в базу и/или постепенно во время разгрузки сервера.
оптимизируются после перегенерации сегмента, ну и есно до отправки клиенту\сохранения на диск…
тут два момента — кеш хит ~50%, те 50% запросов генерим он деманд, и 10Мбит у сервера.
Сейчас канал загружен на 60%, без краша будет 80-90%
А вот cpu только на 20% загружен
а можно поинтересоваться, что за изображения вы отдаете клиентам, точнее какой размер они должны иметь, чтобы pngcrush прогонял их за 10-40 мсек. Скрин этого окна гонялся в нем на дефолтных настройках секунду с небольшим и свой процессор я таки не считаю слабым.
тайлы карты 256х256, 32 бита, особо не много цветов(хотя мелких градинетов вообще много)
pngcrush -rema all -m 7 src dest => 0-40 msec
нашел еще статейку до кучи. хоть и на сайте сами знаете кого, но тоже по теме.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации