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

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 от Independent JPEG Group (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-turbo [ править ]

libjpeg-турбо является вилка из 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.

mozjpeg [ править ]

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 (ISO / IEC 14495). [30] Хотя он также называется libjpeg, он не связан с исходным кодом, предоставленным Independent JPEG Group (IJG), и не поддерживает проприетарные расширения, представленные IJG с 2007 года.

См. Также [ править ]

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

Ссылки [ править ]

  1. ^ Göhler, Lars (29 апреля 2020). «Доступна новая версия libjpeg (Ver. 9d) от Independent JPEG Group» . JPEGclub.org . Независимая группа JPEG . Проверено 25 января 2021 .
  2. ^ Friesenhahn, Боб (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 . CS1 maint: обескураженный параметр ( ссылка )
  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 года . CS1 maint: обескураженный параметр ( ссылка )
  14. ^ Mans Rullgard (Hardwarebug.org), 1 февраля 2010: IJG качается снова, и промахи
  15. ^ a b Андре Крамер (heise.de-Newsticker), 14 января 2013 г .: Mozilla-Encoder verbessert JPEG-Kompression
  16. ^ Себастьян Грюнер, 16 июля 2014 г .: mozjpeg 2.0: Facebook unterstützt JPEG-Encoder von Mozilla
  17. ^ http://www.soeren-hentzschel.at/mozilla/2014/07/30/cloudflare-moechte-zu-mozillas-jpeg-encoder-beitragen/
  18. ^ «Кодирование неподвижных изображений на основе ITU-T T.81 (JPEG-1) с использованием альтернативного арифметического кодера» (pdf). Сентябрь 2009 г.
  19. ^ Предложение ITU-T JPEG-Plus R3
  20. ^ Эволюция JPEG
  21. ^ JPEG 9 Кодирование без потерь
  22. ^ https://github.com/thorfdbg/libjpeg
  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. ^ Andreas Донат (golem.de), 6 марта 2014: Mozilla будет JPEGs Бессер komprimieren
  30. ^ https://jpeg.org/jpegxt/software.html

Внешние ссылки [ править ]

  • Официальный сайт Independent JPEG Group
  • Часто задаваемые вопросы по JPEG
  • JPEGclub - Дополнительные возможности для libjpeg
  • Двоичный пакет libjpeg для Windows (в GnuWin32 в SourceForge.net)
  • libjpeg-turbo , ABI- / API-совместимый форк libjpeg, который использует инструкции x86 SIMD для достижения существенного ускорения по сравнению с эталонной реализацией.
  • mozjpeg - форк для оптимизации размера файла на GitHub
  • Найман, Роберт; Аас, Джош (6 августа 2014 г.). «Использование mozjpeg для создания эффективных JPEG-файлов» . Хаки . Mozilla.