libjpeg


Из Википедии, свободной энциклопедии
  (Перенаправлено из Independent JPEG Group )
Перейти к навигации Перейти к поиску

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

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

Утилиты

Вместе с libjpeg поставляются следующие утилиты:

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

jpegtran

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

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

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

  • устранить нестандартные данные, специфичные для приложения, вставленные некоторыми программами обработки изображений,
  • выполнять определенные преобразования в файле, например:
    • отбрасывание цветовых каналов (преобразование в оттенки серого),
    • вращение и переворот с шагом 90 градусов,
    • обрезка или объединение границ блока изображения (каждые 8×8 или 16×16 пикселей),
    • масштабирование. [7]

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

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

История

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

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

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

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

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

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

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

Версии

Вилки

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

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

libjpeg-турбо

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

libjpeg-turbo можно настроить для совместимости с libjpeg v7 или v8 ABI, но он не реализует полный набор функций последних выпусков IJG, включая расширение формата SmartScale. [27] Проект libjpeg-turbo решил не поддерживать SmartScale, сославшись на опасения по поводу того, что это не стандарт ITU-T , и сославшись на собственное исследование, которое ставит под сомнение полезность этой функции. Кроме того, поскольку единственная важная новая функция в libjpeg v9 относится к формату SmartScale, проект libjpeg-turbo решил отказаться от эмуляции libjpeg v9. [13] Таким образом, файлы SmartScale, созданные с помощью libjpeg v8 и более поздних версий, не будут корректно распаковываться с помощью libjpeg-turbo.

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

мозжпег

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

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

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

ISO libjpeg

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

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

  • Редактирование без потерь
  • Кодировщик Guetzli JPEG

использованная литература

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

внешняя ссылка

  • Официальный сайт Независимой группы JPEG
  • Часто задаваемые вопросы по JPEG
  • JPEGclub — Дополнительные возможности для libjpeg
  • Бинарный пакет libjpeg для Windows (в GnuWin32 на SourceForge.net)
  • libjpeg-turbo , ABI-/API-совместимый форк libjpeg, который использует инструкции x86 SIMD для достижения существенного ускорения по сравнению с эталонной реализацией.
  • mozjpeg — форк оптимизации файлов на GitHub
  • Найман, Роберт; Аас, Джош (6 августа 2014 г.). «Использование mozjpeg для создания эффективных файлов JPEG» . Хаки . Мозилла.
Получено с https://en.wikipedia.org/w/index.php?title=Libjpeg&oldid=1064268637 "