Редактор Хабрахабра
2,0
рейтинг
13 января 2014 в 22:07

Разработка → Pngquant — библиотека и утилита командной строки для сжатия png с потерями

Вышла новая версия (2.0.1) утилиты.

Утилита позволяет преобразовывать png с 24 и 32 битами на пиксель в png с палитрой (8 бит).

Разработчики утверждают, что утилита в некоторых случаях позволяет уменьшить размер файла аж на 70% от исходного, сохраняя при этом альфа прозрачность (при этом утверждают, что прозрачность обрабатывается в IE6 лучше, чем у 24-битных png — не то, чтобы это всерьёз кого-то заботило...).

Особенности:

— создание новой палитры с использованием алгоритмов векторного квантования
— уникальный дизеринг, добавляющий к картинкам меньше шума, чем стандартный алгоритм Флойда-Стейнберга
— легко интегрируется со скриптам и gui (ну ещё бы, это же командная строка)
— есть ускоренный режим работы, для обработки большого кол-ва изображений

Давайте проверим. Под катом — картинки (сюрприз), i.e. — трафик.

Изображение 1.




Исходное несжатое изображение, 1'389'142 байт. 72'664 уникальных цветов.

Сжатое изображение, 530'334 байт. 256 цветов в палитре.

По-моему, неплохо. Разницы я не увидел. Сжатие на 62%.

Изображение 2.




Исходное изображение, 693'602 b. 39'121 уникальных цветов.

Сжатое изображение, 230'297 b. 256 цветов в палитре.

Видна небольшая разница (губы, куртка). Но не сказать, чтоб существенная.

Изображение 3.




Исходное изображение, 745'912 b. 140'838 уникальных цветов.

Сжатое изображение, 236'205 b. 256 цветов в палитре.

Разница кое-где заметна, но только если переключаться между исходной и сжатой картинками. Если посмотреть на одну, а через минуту — на другую, вряд ли вы вспомните, в чём разница.

Вывод: совсем неплохо.
Вячеслав Голованов @SLY_G
карма
248,2
рейтинг 2,0
Редактор Хабрахабра
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (24)

  • +2
    Вообще, впечатляет.
    Что касается третьего изображения, то если посмотреть девушке на губы, то видна очень даже существенная разница. Попробовал уменьшить изображение на 50%, то разницы и вовсе не заметно. Т.е, для небольших и некоторых средних картинок будет весьма полезна. Интересны были бы порты на разных языках, к примеру: python, perl, php. Применимости и динамичности было бы больше. Из консоли под Debian процессить конечно хорошо, но это ограничивает ипользование на шаред хостингах и в качестве built-in tool-а, например, в продуктах. Но это уже отдельная тема.
    В закладки, спасибо.
    • 0
      Никто вам не запрещает использовать подобные утилитки на shared хостингах. У меня для этого была настроена очередь (после аплоада файла создавался таск на прогон через оптимизаторы и создание превьюшек) и все хорошо работало. Все же из консольных скриптов достаточно часто разрешается использовать shell_exec.
      • 0
        Да? Для того, что бы их использовать на шареде — их надо сначала проинсталить, не правда ли? Хостер, если он конечно маразмом не страдает никогда не поставит на рабочую среду неизвестно какой софт, который может содержать эксплоит, например, и тем более, ради одного юзера. Так что причем тут shell_exec? Смысл моего коммента был в самой возможности установить его на шаред. Поэтому я и заикнулся про порты на скриптовых языках.
        • 0
          Да, действительно… установить какой-то пакет у вас не выйдет, но если хостер предоставляет доступ по ssh (а большинство предоставляют), то никто не сможет помешать вам воспользоваться wget или scp, и собственноручно залить на сервер нужный бинарник. Я так разварачивал на шаред хостинге wkhtmltopdf, node.js + npm и много чего еще интересного.
          • 0
            Я всё понимаю, не новичок.
            А что у вас за шаред такой, позвольте узнать? Для себя бы я такой хостинг не брал, если только поразвлечься :-)
            Суть была не в конкретном хостинге, что где-то это возможно, а в потоке проектов: заказ -> реализация -> сдача. Т.е есть ядро (CMS/CMF) с этой «мулькой», а хостинг без разницы какой. Ты одал и не волнуешься, что там у кого работает, у кого нет. Т.е была бы 99% совместимость либы в её скриптовом варианте.
            Как вы разворачивали без компиляции под конкретную среду? Есть зависимости пакетов, системы и т.д.
            Короче, это оффтоп и смысла нет продолжать.
            • 0
              Вы же не из под рута все будете запускать, так что доступа к системе у вас не будет, а следовательно можно разрешить пользователям запускать бинарники. Так что не вижу в этом ничего примечательного или интересного.

              node.js как и большая часть других утилит доступна в уже собранном виде (даже не в виде пакетов, просто бинарники), так что никакой компиляции не нужно.

              Так же я не вижу проблем в плане сопровождения. Вы установили, настроили и не паритесь. Думаю у нас с вами просто разная специфика проектов.

              p.s. скриптовая имплементация подобных утилит нецелесообразна. Потому их нет. Хотя при желании можете портировать.
  • +6
    Не очень понятны критерии выбора изображений для демонстрации. Выбраны такие примеры, которые в png, пусть и оптимизированный, никто жать не будет. Для них всех прекрасно подходит JPEG, особенно для последней, где сжатая версия намного хуже выглядит.

    Мне кажется стоило продемонстрировать на сценариях, которые могли бы существовать реально. Например на логотипах/иконках с альфа-каналом.
    • –2
      А зачем иконки-логотипы сжимать? Они и так ведь мало весят.
      • +5
        Если они анимированы спрайтами, то могут весить вполне прилично. Спрайты, особенно в веб-играх — отличный реальный пример, где сжатие png было бы очень востребовано.
    • +3
      Да, взяты явно JPEG-варианты. Наиболее частый кандидат на PNG — это скриншоты интерфейсов приложений, вот их и надо было тестить и к тематике Хабра ближе.
    • +2
      Для более глубокого понимания есть статьи chikuyonok на Smashing Magazine:
      www.smashingmagazine.com/2009/07/15/clever-png-optimization-techniques/
      www.smashingmagazine.com/2009/07/25/png-optimization-guide-more-clever-techniques/

      Или на русском языке в Техногрете:
      www.artlebedev.ru/tools/technogrette/img/png-1/
      www.artlebedev.ru/tools/technogrette/img/png-2/
      www.artlebedev.ru/tools/technogrette/img/png-3/
      www.artlebedev.ru/tools/technogrette/img/png-4/

      Кроме pngquant есть очень много альтернатив, подробное сравнение которых представлено здесь.

      Наслаждайтесь :-)
      • 0
        А я просто скармливаю всё панде — tinypng.com/
        • 0
          Вручную? о_О
          • 0
            Вручную да. У меня не 100500 картинок, да и из консоли мне работать неудобно. А тут драг и дроп, юзерфрендли и всё такое. Вот такие мы — виндузятники — всюду нам GUI подавай, мда…
            • 0
              grunt-contrib-imagemin — включил и забыл.
              • 0
                Это надо читать про Grunt — я вообще первый раз это вижу. А дальше инсталляция: npm install grunt-contrib-imagemin --save-dev, которая для меня является абракадаброй. Это вообще линуксовая команда или виндовая? Вроде в линуксе ключи с минусов начинаются да?
              • 0
                С Grunt есть один момент неприятный — оптимизация идет при каждой сборке что хорошо замедляет процесс.
                • 0
                  Для большинства задач в Гранте есть возможность указать фильтр на файлы — http://gruntjs.com/configuring-tasks#files

                  Можно например сравнивать дату изменения.
                  • 0
                    Каким образом фильтр поможет если в репозитории файлы лежат неоптимизированные?
                    • 0
                      Если перед новой сборкой удаляется результат предыдущей, то действительно не поможет. Но ведь можно не собирать то, что не изменилось с момента последней сборки (ведь у нас уже есть оптимизированная версия этого изображения).

                      • 0
                        Это если у вас только 1 машина для сборки и продукт никак не кастомизируется :)
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Туманный пейзаж с 8-битной палитрой будет выглядеть гораздо хуже, чем ваши контрастные фотки
  • +1
    Сколько же раз писали на хабре про pngquant и панду, которая его использует?
    И да, для мобильной графики инструмент просто незаменим — рисованные кнопки с прозрачностью в 8 битах и на мелких экранах выглядят отлично, а трафик экономится существенно.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.