stringtranslate.com

libjpeg

libjpeg — бесплатная библиотека с функциями для работы с форматом данных изображений JPEG . Он реализует кодек JPEG (кодирование и декодирование) наряду с различными утилитами для обработки данных JPEG. Он написан на языке C и распространяется как свободное программное обеспечение вместе со своим исходным кодом на условиях специальной разрешающей ( BSD- подобной) лицензии свободного программного обеспечения, требующей указания авторства . Исходный вариант поддерживается и публикуется Independent JPEG Group (IJG). Между тем, существует несколько форков с дополнительными функциями.

Изображения JPEG JFIF широко используются в Интернете. Степень сжатия можно регулировать для достижения желаемого компромисса между размером файла и качеством изображения. [4]

Утилиты

Вместе с libjpeg поставляются следующие служебные программы:

cjpeg и djpeg
для выполнения преобразований между JPEG и некоторыми другими популярными форматами файлов изображений.
rdjpgcom и wrjpgcom
для вставки и извлечения текстовых комментариев в файлах JPEG.
jpegtran
для преобразования существующих файлов JPEG.

jpegtran

jpegtran преобразует данные JPEG без перекодирования
(здесь с пользовательским интерфейсом CropGUI )

Программа командной строки jpegtran предоставляет несколько функций для переформатирования и перекодирования представления коэффициентов DCT , для преобразования фактических данных изображения и для удаления вспомогательных данных в файлах JPEG соответственно. Преобразования, касающиеся представления коэффициентов, включают в себя:

Каждое из этих преобразований происходит без потерь и обратимо. Преобразования данных изображения включают в себя:

Они выполняются без потерь и обратимы только в отношении сохраняемых данных изображения. Перекодирование с повторным квантованием данных изображения с потерями ( потеря генерации ) не происходит.

Существует связанное приложение Windows, Jpegcrop, которое предоставляет пользовательский интерфейс для jpegtran . Для Unix-подобных систем, таких как Linux, существует бесплатный CropGUI с аналогичной функциональностью. Дополнительные программы, поддерживающие функции преобразования JPEG без потерь на основе кода IJG, приведены в списке приложений без потерь.

История

Реализация JPEG, разработанная Independent JPEG Group (IJG), была впервые публично выпущена 7 октября 1991 года и с тех пор значительно усовершенствовалась. Разработкой изначально в основном занимался Том Лейн . Реализация IJG с открытым исходным кодом была одним из основных пакетов с открытым исходным кодом и сыграла ключевую роль в успехе стандарта JPEG. Многие компании включили его в различные продукты, такие как редакторы изображений и веб-браузеры. [9]

Для версии 5, выпущенной 24 сентября 1994 года, была переписана вся кодовая база. Он представил служебные программы rdjpgcom и wrjpgcom для обработки встроенных текстовых комментариев. Версия 6 от 2 августа 1995 года имела поддержку прогрессивного JPEG и впервые содержала служебную программу jpegtran . В версии 6b эта утилита была расширена функциями поворота и переворачивания изображений, а также уменьшением оттенков серого.

libjpeg-turbo и его потомки

Из версии 6b libjpeg от 27 марта 1998 года Миясака Масару создал ветку под названием libjpeg/SIMD , которая включала оптимизацию SIMD x86. В 2009 году он получил существенный вклад от проектов TigerVNC и VirtualGL. На этой основе в 2010 году был создан проект libjpeg-turbo. [10]

4 марта 2014 года была опубликована первая версия форка mozjpeg , оптимизирующего размер файла. Для этой версии Джош Аас из Mozilla Research переработал Perl- скрипт jpegcrush от главного разработчика x264 Лорена Мерритта и интегрировал его в базу кода libjpeg-turbo. [11]

10 июля 2014 года Mozilla выпустила версию 2.0, в которой в основном добавлено решетчатое квантование, а также теперь можно уменьшать размер базовых файлов JPEG. Facebook , Inc. пожертвовала60 000  долларов на разработку следующей версии [12] и CloudFlare выделили разработчику на улучшение mozjpeg. [13]

В 2019 году libjpeg-turbo стал стандартом ISO, а ITU одобрил эталонную реализацию формата JPEG. [14]

Смена руководства IJG

После 11 лет и смены руководства IJG под руководством Гвидо Волльбединга выпустила новые версии libjpeg (с 7 по 9), каждая из которых нарушала совместимость ABI с предыдущими версиями. [15] Изменения, которые ожидались после серии 6x, не были реализованы. [16] В версии 7 была введена поддержка арифметического кодирования , которая ранее была отклонена из-за патентной ситуации, а также функция обрезки в jpegtran ( -crop). [16]

Версии 8 и 9 в основном служили для введения спорных [17] несовместимых расширений формата. Многие считают их неэффективными и уступающими существующим стандартизированным решениям. [18] [19] Их стандартизация была отклонена после подачи в ITU-T . Первоначальный организатор Том Лейн и другие критикуют эти изменения как отход от целей IJG. [17]

Версии

Вилки

Хорошо известны форки libjpeg-turbo, оптимизирующие скорость выполнения, и mozjpeg, оптимизирующие файлы меньшего размера.

Существует также библиотека с аналогичным названием от ISO , целью которой является полная реализация стандартов JPEG, JPEG XT и JPEG-LS . [25]

libjpeg-турбо

libjpeg-turbo — это ответвление libjpeg, которое использует инструкции SIMD для ускорения базового кодирования и декодирования JPEG. Многие проекты теперь используют libjpeg-turbo вместо libjpeg, включая популярные дистрибутивы Linux ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla и Chrome . [26] [27] [28] Помимо производительности, некоторые проекты решили использовать libjpeg-turbo, поскольку это позволяет им сохранить обратную совместимость ABI со старой версией libjpeg v6b. [29] libjpeg v7, v8 и v9 нарушили совместимость ABI с предыдущими выпусками. [15]

libjpeg-turbo реализует совместимое со стандартами арифметическое кодирование и функции обрезки без потерь, представленные в libjpeg v7. Его также можно настроить для совместимости с ABI libjpeg v7 или v8, но он реализует масштабирование DCT и собственную технологию SmartScale, основанную на масштабировании DCT. [30] libjpeg-turbo предпочитает не поддерживать SmartScale, поскольку он не является стандартом ITU-T и потому что их собственные исследования считают его (и масштабирование DCT) неэффективным. [21] В более широком смысле, поскольку единственная важная новая функция в libjpeg v9 специфична для формата SmartScale, проект libjpeg-turbo решил отказаться от эмуляции libjpeg v9. [18]

С 2019 года libjpeg-turbo является одной из двух эталонных реализаций JPEG, доступных как ISO/IEC 10918-7 и ITU-T T.873. [14] Другой эталонной реализацией является ISO libjpeg, которая также включает поддержку JPEG XT и JPEG LS.

mozjpeg

mozjpeg — это ответвление libjpeg-turbo, созданное Джошем Аасом и другими сотрудниками Mozilla Research. Его цель — ускорить загрузку веб-страниц за счет сокращения размера файла (около 10%) и, следовательно, времени передачи за счет повышения эффективности кодирования при сохранении качества изображения. Для этого он использует больше вычислительной мощности для кодирования (асимметрии), сохраняя при этом полную совместимость со стандартом JPEG и не требуя никаких изменений на стороне декодера.

Методы, которые mozjpeg использует для достижения высокой степени сжатия, включают оптимизацию деревьев Хаффмана , использование прогрессивного кодирования для оптимального разделения спектра коэффициентов DCT на отдельные сканирования, а также использование решетчатого квантования . Кроме того, пресеты тщательно настроены на минимизацию размеров файлов.

Помимо libjpeg-turbo, mozjpeg также основан на jpegcrush, Perl- скрипте Лорен Мерритт. [11] [32]

ISO-библиотека jpeg

Объединенная группа экспертов ISO/IEC по фотографии поддерживает эталонную реализацию программного обеспечения для базового JPEG (ISO/IEC 10918-1 и 18477-1) и расширений JPEG XT (ISO/IEC 18477, части 2 и 6-9), а также JPEG-файлов без потерь. LS (ИСО/МЭК 14495). [33] Он также включает в себя некоторые оптимизации mozjpeg. Хотя он также называется libjpeg, он не связан с исходным кодом, предоставленным Independent JPEG Group (IJG), и не поддерживает собственные расширения, представленные IJG с 2007 года.

Смотрите также

Рекомендации

  1. Гёлер, Ларс (29 апреля 2020 г.). «Новая версия libjpeg (версия 9d) от Independent JPEG Group уже доступна». JPEGclub.org . Независимая группа JPEG . Проверено 25 января 2021 г.
  2. Фризенхан, Боб (6 июня 2020 г.). «Re: [Libjpeg-devel-6x] 4 ошибки целочисленного переполнения в libjpeg-9c». SourceForge.net . СоурсФордж . Проверено 25 января 2021 г. Единственное беспокойство заключалось в том, что Гвидо Волльбединг вряд ли подписан на этот список, а IJG JPEG по сути разрабатывается одним человеком.
  3. ^ "Независимая группа JPEG" . Проверено 27 января 2024 г.
  4. ^ JPEG JFIF
  5. ^ Описание настроек и опций Jpegcrop
  6. ^ Киноигры >> Самым большим провалом нашей патентной системы было... Архивировано 1 сентября 2012 г. в Wayback Machine.
  7. ^ 680385 - Firefox не отображает файлы JPEG с арифметической кодировкой.
  8. ^ Новые возможности jpegtran
  9. ^ Домашняя страница JPEG
  10. ^ "libjpeg-турбо". libjpeg-турбо .
  11. ^ ab Андре Крамер (heise.de-Newsticker), 14 января 2013 г.: Mozilla-Encoder verbessert JPEG-Kompression
  12. ^ Себастьян Грюнер, 16 июля 2014 г.: mozjpeg 2.0: Facebook unterstützt JPEG-Encoder von Mozilla
  13. ^ "CloudFlare работает с JPEG-кодировщиком Mozillas" . 30 июля 2014 г.
  14. ^ ab «ISO/IEC 10918-7:2019 Информационные технологии. Цифровое сжатие и кодирование неподвижных изображений с непрерывным тоном. Часть 7. Справочное программное обеспечение». ИСО .«T.873 (19 мая): Информационные технологии. Цифровое сжатие и кодирование неподвижных изображений с непрерывным тоном: Справочное программное обеспечение». www.itu.int .
  15. ^ ab "libjpeg: обзор изменений API/ABI" . Проверено 28 октября 2017 г.
  16. ^ ab Mans Rullgard (Hardwarebug.org), 4 августа 2009 г.: IJG вернулся. Архивировано 16 июля 2014 г. на Wayback Machine.
  17. ^ ab Том Лейн, 16 января 2013 г.: jpeg-9, совместимость API/ABI и будущая роль этого проекта.
  18. ^ ab «А как насчет libjpeg v9?». команда libjpeg-turbo . Проверено 8 февраля 2013 г.
  19. Манс Рулгард (Hardwarebug.org), 1 февраля 2010 г.: IJG снова замахивается и промахивается.
  20. ^ «Кодирование неподвижных изображений на основе ITU-T T.81 (JPEG-1) с использованием альтернативного арифметического кодера» (pdf). Сентябрь 2009 года.
  21. ^ ab "libjpeg-turbo | О / Исследование полезности масштабирования DCT и SmartScale" . libjpeg-turbo.org .
  22. ^ Предложение ITU-T JPEG-Plus R3
  23. ^ Эволюция JPEG
  24. ^ JPEG 9 Кодирование без потерь
  25. Ссылки Гитхаб . 6 октября 2021 г.
  26. ^ Программное обеспечение, которое использует или предоставляет libjpeg-turbo. 9 февраля 2012 г.
  27. ^ Проблема 48789 — хром — используйте libjpeg-turbo вместо libjpeg. 14 апреля 2011 г.
  28. ^ Ошибка 698519 — Обновление до libjpeg-turbo 1.2. 28 февраля 2012 г.
  29. ^ libjpeg для F14. 9 февраля 2012 г.
  30. ^ Файл README libjpeg-turbo. Архивировано 14 декабря 2018 г. на Wayback Machine.
  31. ^ «Релизы · mozilla/mozjpeg» . github.com . Проверено 14 августа 2022 г.
  32. Андреас Донат (golem.de), 6 марта 2014 г.: Mozilla будет лучше использовать JPEG-файлы
  33. ^ "Jpeg - Jpeg Xt" .

Внешние ссылки