Pull to refresh

Comments 37

В основе формата лежит сжатие без потерь. Так что если принудительно цветовую палитру не потрошить — никаких потерь качества не будет.
Нет, разработчики заявляют что все остается как было.
По моим субъективным оценкам тоже ничего не теряется.
Хотя для фотографий наверно лучше использовать старый JPEG или PNG24.
Image-Mode-Indexed — качество теряется, если в исходной картинке было больше 256 цветов. Например, пара-тройка разноцветных градиентов.
Под 256 цветами понимается стандартная палитра или же просто изображение не сможет содержать более 256 цветов? (оттенков серого например)
Что собой представлет «стандартная 256-цевтовая палитра»?
256 цветов при выборе количества цветов экрана например. Я правильно понимаю что разговор не об этом и в формате файла просто установлено ограничение на количество цветов в палитре?
Да, просто цвет кодируется 1 байтом (вместо 3х или 4х), что дает 256 цветов.
А палитра получается индивидуальная для каждого png-файла, и хранится в нем вместе с картинкой.
+вроде бы в PNG возможны варианты кодирования цвета меньшим числом бит, соответственно уменьшается и палитра.
просто больше 256 цветов.
Пользуюсь PNGOut, можно поставить как плагин к Photoshop. Сжимает раза в 2-3.
Сжимает лучше чем стандартный модуль Photoshop?
Если верить ALS, то да, почитать можно тут.
UFO just landed and posted this here
Охотно верю. В старых версиях Photoshop была какая-то странная ошибка, которая значительно увеличивала размер файла.
UFO just landed and posted this here
Попробуйте поставить их горизонтально и проделать ту же процедуру — думаю результат будет.
Все-таки нехорошо дискриминировать людей по используемой системе контроля пакетов. Можно было и ссылки на домашние страницы 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.
Ночью погонял 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
Sign up to leave a comment.

Articles