Google представили Guetzli — Open Source JPEG кодер генерирующий на 20 — 35% более меньший размер файлов по сравнению с Libjpeg

Google работал на нескольких фронтах, чтобы уменьшить объем данных и изображений, следовательно они будут быстрее загружаться из интернета, над такими проектами, как алгоритм Zopfli производящий небольшие файлы PNG & gzip, или алгоритм сжатия изображений WebP обеспечивающим лучшую степень сжатия по сравнению с PNG и более качественное сжатие по сравнению с JPEG, но это потребует обновления поддержки клиентов, таких как веб браузеры. Теперь Google представил алгоритм Guetzli способный производить JPEG файлы на 20-35% меньше по сравнению с libjpeg, с таким же качеством и все еще совместимым с форматом JPEG.

На изображении выше показан крупным планом образцы, JPEG картинка сжатая с помощью libjpeg имеет артефакты вокруг линии, JPEG картинка сжатая с помощью Guetzli имеет меньше артефактов.

Вы можете узнать больше об алгоритме в документе под названием “Guetzli: Perceptually Guided JPEG Encoder“, или почитать аннотацию ниже:

Guetzli это новый JPEG кодер производящий визуально неразличимые изображения с более низким битрейтом по сравнению с с другими JPEG кодерами. Он оптимизирует глобальные таблицы квантования JPEG и DCT коэффициент значений в каждом блоке JPEG используя замкнутый оптимизатор. Guetzli использует Butteraugli, дистанцию восприятия метрики, в качестве источника обратной связи в процессе оптимизации. Мы достигли на 29-45% меньший объем данных для заданного расстояния перспективы, по данным Butteraugli, по сравнению с другими компрессорами испробованными нами. На данный момент Guetzli работает довольно таки медленно, что ограничивает его применимость для сжатия статичного контента и служит доказательством концепции, что мы можем достигнуть значительного сокращения размера, комбинируя расширенные техники психовизуальных моделей с потерями сжатия.

Данный способ сжатия медленнее чем libjpeg или libjpeg-turbo, но поскольку в интернете файл обычно сжимается один раз, а все остальное время распаковывается, это не так важно. Еще одним ограничением является то, что он не поддерживает прогрессивную JPEG кодировку.

Вы можете установить Guetzli самостоятельно, так как его код представлен на github. Там есть сборка инструмента для Ubuntu 16.04:

sudo apt install libpng-dev libgflags-dev git build-essential
git clone https://github.com/google/guetzli/
cd guetzli
make

 

Вы найдете исполняемый файл в папке bin/release, запустите его чтобы увидеть все возможные настройки:

./bin/Release/guetzli 
guetzli: Guetzli JPEG compressor. Usage: 
guetzli [flags] input_filename output_filename

  Flags from /build/gflags-YYnfS9/gflags-2.1.2/src/gflags.cc:
    -flagfile (load flags from file) type: string default: ""
    -fromenv (set flags from the environment [use 'export FLAGS_flag1=value'])
      type: string default: ""
    -tryfromenv (set flags from the environment if present) type: string
      default: ""
    -undefok (comma-separated list of flag names that it is okay to specify on
      the command line even if the program does not define a flag with that
      name.  IMPORTANT: flags in this list that have arguments MUST use the
      flag=value format) type: string default: ""

  Flags from /build/gflags-YYnfS9/gflags-2.1.2/src/gflags_completions.cc:
    -tab_completion_columns (Number of columns to use in output for tab
      completion) type: int32 default: 80
    -tab_completion_word (If non-empty, HandleCommandLineCompletions() will
      hijack the process and attempt to do bash-style command line flag
      completion on this value.) type: string default: ""

  Flags from /build/gflags-YYnfS9/gflags-2.1.2/src/gflags_reporting.cc:
    -help (show help on all flags [tip: all flags can have two dashes])
      type: bool default: false
    -helpfull (show help on all flags -- same as -help) type: bool
      default: false
    -helpmatch (show help on modules whose name contains the specified substr)
      type: string default: ""
    -helpon (show help on the modules named by this flag value) type: string
      default: ""
    -helppackage (show help on all modules in the main package) type: bool
      default: false
    -helpshort (show help on only the main module for this program) type: bool
      default: false
    -helpxml (produce an xml version of help) type: bool default: false
    -version (show version and build info and exit) type: bool default: false

  Flags from guetzli/guetzli.cc:
    -quality (Visual quality to aim for, expressed as a JPEG quality value.)
      type: double default: 95
    -verbose (Print a verbose trace of all attempts to standard output.)
      type: bool default: false

 

Вы идеале лучше использовать сырое или сжатое без потерь изображение, потому первый тест был проведен с фотографией с камеры:

./bin/Release/guetzli IMG_4354.JPG IMG_4354-Guetzli.JPG 
Invalid input JPEG file
Guetzli processing failed

 

В итоге была выдана ошибка JPEG файла, поэтому был использован другой файл (1920×1080 PNG файл):

time ./bin/Release/guetzli MINIX-Launcher3.png MINIX-Launcher3-guetzli.jpg 


real    2m58.594s
user    2m55.840s
sys    0m2.616s

 

Это одно-поточный процесс и занимает много времени (около 3 минут на процессоре AMD FX8350), по крайней мере, с текущей реализацией. Возможно вы захотите запустить его с опцией “verbose” чтобы удостовериться, что он не мертв.

Тест был повторен с использованием качества конвертации 95, так как оно используется в Guetzli по умолчанию:

time convert -quality 95 MINIX-Launcher3.png MINIX-Launcher3-convert.jpg

real    0m0.128s
user    0m0.112s
sys    0m0.012s

 

Файл сжатый с помощью Guetzli действительно примерно на 15% меньше и должен иметь аналогичное качество:

ls -lh MINIX-Launcher3*
-rw-rw-r-- 1 jaufranc jaufranc 534K Mar 17 11:45 MINIX-Launcher3-convert.jpg
-rw-rw-r-- 1 jaufranc jaufranc 453K Mar 17 11:41 MINIX-Launcher3-Guetzli.jpg
-rw-rw-r-- 1 jaufranc jaufranc 1.5M Mar 17 11:35 MINIX-Launcher3.png

 

Выражаем свою благодарность источнику с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments