jpegoptim против jpegtran против mozjpeg
Я нашел два слегка противоречивых сообщения в блоге по этому вопросу, здесь я суммирую:
- jpegoptim и jpegtran работают одинаково и дают идентичные результаты, в то время как mozjpeg занимает вдвое больше времени для очень незначительной экономии файлов
- mozjpeg занимает около 1,7* времени вычислений и дает примерно пропорциональную выгоду в экономии файлов по сравнению с jpegtran
В дополнение к путанице, этот поток Reddit предполагает, что mozjpeg использует тот же алгоритм, что и в jpegcrush, и что jpegcrush является оболочкой для jpegtran... итак, мы прошли полный круг? Я могу только предположить, что эти комментарии Reddit не верны, кто-нибудь может подтвердить это?
1 ответ
Библиотека MozJPEG использует один алгоритм, вдохновленный jpegcrush
(оптимизированное прогрессивное сканирование), но технически это совершенно новая реализация.
Библиотека MozJPEG является заменой популярного libjpeg, поэтому почти каждый инструмент, связанный с JPEG, может быть скомпилирован в обычном и MozJPEG вариантах.
Существует "регулярный" jpegtran
и версия MozJPEG jpegtran
, Это та же самая программа, но версия MozJPEG имеет другие настройки по умолчанию и выполняет дополнительную работу для лучшего сжатия.
Так же, jpegoptim
обычно собирается с помощью libjpeg, но также возможно собрать его с помощью версии libjpeg для MozJPEG (например, ImageOptim делает это).
Есть два способа использования MozJPEG:
- без потерь (возьмите существующий файл JPEG и сделайте его немного меньше). Это то, что MozJPEG
jpegtran
делает. - с потерями (создайте новый файл JPEG из несжатых пикселей с более высоким соотношением качества и размера файла). Это то, что MozJPEG
cjpeg
делает, и другие инструменты, такие какjpegoptim
можно сделать с MozJPEG.
Оба режима работы медленнее, чем ванильный неоптимизирующий libjpeg. Оптимизация без потерь делает меньше работы, но также дает меньший выигрыш.
Более точный анализ скорости здесь: https://libjpeg-turbo.org/About/Mozjpeg
Обратите внимание, что "медленный" здесь относительный. В абсолютном выражении он сжимает несколько мегапикселей в секунду, поэтому может быть достаточно быстрым для большинства приложений.