2016-03-16 5 views
12

я нашел две немного противоречивые сообщения в блоге по этому вопросу, здесь я описываю:jpegoptim против jpegtran против mozjpeg

Добавление к путанице, это Reddit thread предполагает, что mozjpeg использует тот же алгоритм, который используется в jpegcrush, и что jpegcrush является оберткой для jpegtran ... так что мы набрали полный круг? Я могу только предположить, что те комментарии Reddit ошибочны, может ли кто-нибудь подтвердить это?

+0

Как вы можете прочитать из описания [JPGCrush] (http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3610.0) и из [этой статьи] (https: // techcrunch. com/2014/03/05/mozillas-new-jpeg-encoder-promises-up-to-10-reduce-in-file-sizes /), JPGCrush - это оболочка Perl вокруг 'jpegtran', которая использует несколько параметров сжатия JPEG (перечисленные в 'jpeg_scan_rgb.txt' - каждая строка представляет собой структуру [' jpeg_scan_info'] (https://github.com/cloudflare/jpegtran/blob/570e8e87c8c618ff028e60eb84eaa816a3fe6b40/jpeglib.h#L198) и выбирает наименьший результат. И 'mozjpeg' следует тому же алгоритму. –

+1

Только что нашел ответ на ваш вопрос [здесь] (https://news.ycombinator.com/item?id=8142893#up_8143648): _jpegcrush/jpegrescan трюк: улучшает детали прогрессивного JPEG для максимального сжатия (каждое сканирование получает его собственный стол Хаффмана, а JPEG может произвольно делить данные на сканирование) _. Также найдено [описание файла сканирования] (https://github.com/mozilla/mozjpeg/blob/v3.1/wizard.TXT # L113). –

ответ

0

В библиотеке MozJPEG используется один алгоритм, основанный на jpegcrush (оптимизированное прогрессивное сканирование), но технически это совершенно новая реализация.

Библиотека MozJPEG является заменой для популярного libjpeg, поэтому почти каждый инструмент, связанный с JPEG, может быть скомпилирован в «обычных» и «MozJPEG» вариантах.

Существует «обычный» jpegtran и версия MozJPEG jpegtran. Это та же самая программа, но версия MozJPEG имеет разные настройки по умолчанию и выполняет дополнительную работу по сжатию.

Аналогичным образом, jpegoptim, как правило, построен с запасом libjpeg, но его также можно построить с помощью версии libjpeg от MozJPEG (например, ImageOptim).


Есть два способа использования MozJPEG:

  1. без потерь (взять существующий файл JPEG и сделать его немного меньше). Это то, что делает jpegtran в MozJPEG.
  2. lossy (создайте новый JPEG-файл из несжатых пикселей с более высоким соотношением качество/размер файла). Это то, что делает MozjpEG cjpeg, и другие инструменты, такие как jpegoptim, могут быть сделаны с MozJPEG.

Оба режима работы медленнее, чем ванильный, не оптимизирующий libjpeg. Оптимизация без потерь делает меньше работы, но также обеспечивает меньший выигрыш.

Более точный анализ скорости здесь: https://libjpeg-turbo.org/About/Mozjpeg

Обратите внимание, что «медленный» здесь является относительным. В абсолютном выражении он сжимает несколько мегапикселей в секунду, поэтому он может быть достаточно быстрым для большинства приложений.

Смежные вопросы