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, соответственно. Преобразования , касающиеся представления коэффициентов, включают:

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

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

История

Реализация 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 , которая включала оптимизации x86 SIMD. Она получила существенный вклад от проектов TigerVNC и VirtualGL в 2009 году. На этой основе в 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]

В апреле 2024 года Google представила Jpegli — новую библиотеку кодирования JPEG, которая предлагает расширенные возможности и улучшение коэффициента сжатия на 35% при высоких настройках сжатия, при этом скорость кодирования сопоставима с MozJPEG. [15]

Изменения в руководстве IJG

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

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

Версии

Вилки

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

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

libjpeg-турбо

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

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

С 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] [34]

Jpegli

В апреле 2024 года Google представила Jpegli — новую библиотеку кодирования JPEG, которая предлагает расширенные возможности и улучшение коэффициента сжатия на 35% при высоких настройках сжатия, при этом скорость кодирования сопоставима с MozJPEG. [35]

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

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

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

Ссылки

  1. ^ Гёлер, Ларс (29 апреля 2020 г.). «Новая версия libjpeg (Ver. 9d) Independent JPEG Group уже доступна». JPEGclub.org . Independent JPEG Group . Получено 25.01.2021 .
  2. ^ Friesenhahn, Bob (6 июня 2020 г.). "Re: [Libjpeg-devel-6x] 4 ошибки переполнения целых чисел в libjpeg-9c". SourceForge.net . SourceForge . Получено 25.01.2021 . Единственное беспокойство вызывало то, что Гвидо Фолльбединг вряд ли подписан на этот список, а IJG JPEG по сути разрабатывается одним человеком.
  3. ^ "Independent JPEG Group" . Получено 27 января 2024 г.
  4. ^ JPEG JFIF
  5. ^ Описание настроек и параметров Jpegcrop
  6. ^ Кинематографические игры >> Величайшим провалом нашей патентной системы было... Архивировано 01.09.2012 на Wayback Machine
  7. ^ 680385 - Firefox не отображает арифметически закодированные JPEG-файлы
  8. ^ Новые возможности jpegtran
  9. ^ Домашняя страница JPEG
  10. ^ "libjpeg-turbo". libjpeg-turbo .
  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. Справочное программное обеспечение". ISO ."T.873 (05/19): Информационные технологии - Цифровое сжатие и кодирование неподвижных изображений с непрерывным тоном: Справочное программное обеспечение". www.itu.int .
  15. ^ "Представляем Jpegli: новую библиотеку кодирования JPEG". Блог Google Open Source. 3 апреля 2024 г. Архивировано из оригинала 3 апреля 2024 г. Получено 4 апреля 2024 г.
  16. ^ ab "libjpeg: обзор изменений API/ABI" . Получено 28.10.2017 .
  17. ^ ab Mans Rullgard (Hardwarebug.org), 4 августа 2009 г.: IJG вернулся Архивировано 16 июля 2014 г. на Wayback Machine
  18. ^ Том Лейн, 16 января 2013 г.: jpeg-9, совместимость API/ABI и будущая роль этого проекта
  19. ^ ab "Что насчет libjpeg v9?". libjpeg-turbo team . Получено 8 февраля 2013 г.
  20. Mans Rullgard (Hardwarebug.org), 1 февраля 2010 г.: IJG снова замахивается и промахивается.
  21. ^ "Кодирование неподвижных изображений на основе ITU-T T.81 (JPEG-1) с использованием альтернативного арифметического кодера" (pdf). Сентябрь 2009 г.
  22. ^ ab "libjpeg-turbo | О проекте / Исследование полезности масштабирования DCT и SmartScale". libjpeg-turbo.org .
  23. ^ Предложение ITU-T JPEG-Plus R3
  24. ^ Эволюция JPEG
  25. ^ Кодирование без потерь JPEG 9
  26. ^ "Libjpeg". GitHub . 6 октября 2021 г.
  27. ^ "Release 3.0.4 · libjpeg-turbo/libjpeg-turbo" . Получено 15 сентября 2024 г. .
  28. ^ Программное обеспечение, использующее или предоставляющее libjpeg-turbo. 9 февраля 2012 г.
  29. Проблема 48789 – chromium – Используйте libjpeg-turbo вместо libjpeg. 14 апреля 2011 г.
  30. ^ Ошибка 698519 – Обновление до libjpeg-turbo 1.2. 28 февраля 2012 г.
  31. ^ libjpeg для F14. 9 февраля 2012 г.
  32. ^ Файл libjpeg-turbo README Архивировано 14 декабря 2018 г. на Wayback Machine
  33. ^ "Выпуски · mozilla/mozjpeg". github.com . Получено 2022-08-14 .
  34. Андреас Донат (golem.de), 6 марта 2014 г.: Mozilla будет лучше использовать JPEG
  35. ^ "Представляем Jpegli: новую библиотеку кодирования JPEG". Блог Google Open Source. 3 апреля 2024 г. Архивировано из оригинала 3 апреля 2024 г. Получено 4 апреля 2024 г.
  36. ^ "Jpeg - Jpeg Xt".

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