libjpeg
Разработчик(и) | Независимая группа JPEG Гвидо Волльбединг (сопровождающий) [1] [2] |
---|---|
Первоначальный выпуск | 7 октября 1991 г |
Стабильная версия | 9ф [3] / 14 января 2024 г |
Написано в | С |
Операционная система | Кросс-платформенный |
Тип | библиотека |
Лицензия | Пользовательское BSD -подобное ( бесплатное программное обеспечение ) |
Веб-сайт | 100 jpegclub.org |
libjpeg — бесплатная библиотека с функциями для работы с форматом данных изображений JPEG . JPEG Он реализует кодек (кодирование и декодирование) наряду с различными утилитами для обработки данных JPEG.Он написан на языке C и распространяется как свободное программное обеспечение вместе со своим исходным кодом на условиях специальной разрешающей ( BSD -подобной) лицензии свободного программного обеспечения, требующей указания авторства .Исходный вариант поддерживается и публикуется Independent JPEG Group (IJG). Между тем, существует несколько форков с дополнительными функциями.
Изображения JPEG JFIF широко используются в Интернете. Степень сжатия можно регулировать для достижения желаемого компромисса между размером файла и качеством изображения. [4]
Утилиты
[ редактировать ]Вместе с libjpeg поставляются следующие служебные программы:
- cjpeg и djpeg
- для выполнения преобразований между JPEG и некоторыми другими популярными форматами файлов изображений.
- rdjpgcom и wrjpgcom
- для вставки и извлечения текстовых комментариев в файлах JPEG.
- jpegtran
- для преобразования существующих файлов JPEG.
jpegtran
[ редактировать ]Программа командной строки . jpegtran предоставляет несколько функций для переформатирования и перекодирования представления коэффициентов DCT , для преобразования фактических данных изображения и для удаления вспомогательных данных в файлах JPEG соответственно Преобразования, касающиеся представления коэффициентов, включают в себя:
- оптимизация уровня кодирования Хаффмана файла JPEG для увеличения сжатия,
- преобразование между прогрессивным и последовательным форматами JPEG,
- преобразование между Хаффманом и арифметическим кодированием на уровне энтропийного кодирования . [5] [6] [7]
Каждое из этих преобразований происходит без потерь и обратимо. Преобразования данных изображения включают в себя:
- исключить нестандартные данные, специфичные для приложения, вставленные некоторыми программами обработки изображений,
- выполнить определенные преобразования файла, например:
- отбрасывание цветовых каналов (преобразование в оттенки серого),
- вращение и переворачивание с шагом 90 градусов,
- обрезка или объединение по границам блоков изображений (каждые 8×8 или 16×16 пикселей),
- масштабирование. [8]
Они выполняются без потерь и обратимы только в отношении сохраняемых данных изображения. Перекодирование с повторным квантованием данных изображения с потерями ( потеря генерации ) не происходит.
Существует связанное приложение Windows, Jpegcrop , которое предоставляет пользовательский интерфейс для jpegtran . На Macintosh есть приложение SquarePusher . Для 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]
первая версия форка MozJPEG 4 марта 2014 года была опубликована для оптимизации размера файла. Для этой версии Джош Аас из 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]
Версии
[ редактировать ]Версия | Выпущенный | Новые возможности | |
---|---|---|---|
Совместимость с ITU T.81 JPEG | |||
1 | 1991 |
| |
2 | 1991 |
| |
3 | 1992 | Внутренние улучшения и улучшения качества изображения. | |
4 | 1992 | Внутренние улучшения и улучшения скорости | |
4a | 1993-02-18 | ||
5 | 1994-09-24 | Внутренние улучшения и обновленный API | |
5a | 1994-12-07 | ||
5b | 1995-03-15 | ||
6 | 1995-08-02 |
| |
6a | 1996-02-07 | ||
6b. | 1998-03-27 |
(используется libjpeg-turbo , MozJPEG и Jpegli ) | |
7 | 2009-06-27 | ||
Собственные несовместимые расширения | |||
8 | 2010-01-10 | ||
8a | 2010-02-28 | РГБА | |
8b | 2010-05-16 | Повреждения памяти и исправления сборки | |
8c. | 2011-01-16 | Возможность выбора размера блока DCT (SmartScale) | |
8d | 2012-01-15 | RGB JPEG (без преобразования цвета в YCbCr) | |
9 | 2013-01-13 | ||
9a | 2014-01-19 | ||
9b | 2016-01-17 | Улучшения вычислений | |
9c. | 2018-01-14 | jpegtran -wipe | |
9d | 2020-01-12 |
| |
9e | 2022-01-16 | Поддержка ARM и ARM64 (MSVC) | |
9f. | 2024-01-14 |
|
Легенда: | Старая версия, не поддерживается | Старая версия, все еще поддерживается | Текущая стабильная версия |
---|
Вилки
[ редактировать ]Хорошо известны форки libjpeg-turbo, оптимизирующие скорость выполнения, и MozJPEG, оптимизирующие файлы меньшего размера.
Существует также одноименная библиотека ISO LS , целью которой является полная реализация стандартов JPEG, JPEG XT и JPEG- . [26]
libjpeg-турбо
[ редактировать ]Разработчик(и) | Проект libjpeg-turbo |
---|---|
Первоначальный выпуск | 19 ноября 2010 г |
Стабильная версия | 3.0.0 / 3 июля 2023 г |
Репозиторий | github |
Веб-сайт | libjpeg-турбо |
libjpeg-turbo — это ответвление libjpeg, которое использует SIMD инструкции для ускорения базового кодирования и декодирования JPEG. Многие проекты теперь используют libjpeg-turbo вместо libjpeg, включая популярные дистрибутивы Linux ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla и Chrome . [27] [28] [29] Помимо производительности, некоторые проекты решили использовать libjpeg-turbo, поскольку это позволяет им сохранить обратную совместимость ABI со старой версией libjpeg v6b. [30] libjpeg v7, v8 и v9 нарушили совместимость ABI с предыдущими выпусками. [16]
libjpeg-turbo реализует совместимое со стандартами арифметическое кодирование и функции обрезки без потерь, представленные в libjpeg v7. Его также можно настроить для совместимости с ABI libjpeg v7 или v8, но он реализует масштабирование DCT и собственную технологию SmartScale, основанную на масштабировании DCT. [31] 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.
МозJPEG
[ редактировать ]Разработчик(и) | Исследования Мозиллы |
---|---|
Первоначальный выпуск | 4 марта 2014 г |
Стабильная версия | 4.1.1 / 26 февраля 2021 г [32] |
Веб-сайт | github |
MozJPEG — это ответвление libjpeg-turbo, созданное Джошем Аасом и другими из Mozilla Research. Его цель — ускорить загрузку веб-страниц за счет сокращения размера файла (около 10%) и, следовательно, времени передачи за счет повышения эффективности кодирования при сохранении качества изображения. Для этого он использует больше вычислительной мощности для кодирования (асимметрии), сохраняя при этом полную совместимость со стандартом JPEG и не требуя никаких изменений на стороне декодера.
Методы, которые MozJPEG использует для достижения высокой степени сжатия, включают оптимизацию деревьев Хаффмана , использование прогрессивного кодирования для оптимального разделения спектра коэффициентов DCT на отдельные сканирования, а также использование решетчатого квантования . Кроме того, пресеты тщательно настроены на минимизацию размеров файлов.
Помимо libjpeg-turbo, MozJPEG также основан на jpegcrush, сценарии Perl Лорен Мерритт. [11] [33]
Джпегли
[ редактировать ]Разработчик(и) | |
---|---|
Первоначальный выпуск | 3 апреля 2024 г |
Репозиторий | github |
Веб-сайт | github |
В апреле 2024 года Google представила Jpegli , новую библиотеку кодирования JPEG, которая предлагает расширенные возможности и улучшение степени сжатия на 35% при настройках сжатия высокого качества, при этом скорость кодирования сравнима с MozJPEG. [34]
ISO-библиотека jpeg
[ редактировать ]ISO/IEC Объединенная группа экспертов по фотографии поддерживает эталонную реализацию программного обеспечения для базового JPEG (ISO/IEC 10918-1 и 18477-1) и расширений JPEG XT (ISO/IEC 18477, части 2 и 6-9), а также JPEG-файлов без потерь. LS (ИСО/МЭК 14495). [35] Он также включает некоторые оптимизации MozJPEG. Хотя он также называется libjpeg, он не связан с исходным кодом, предоставленным Independent JPEG Group (IJG), и не поддерживает собственные расширения, представленные IJG с 2007 года.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Гёлер, Ларс (29 апреля 2020 г.). «Новая версия libjpeg (версия 9d) от Independent JPEG Group уже доступна» . JPEGclub.org . Независимая группа JPEG . Проверено 25 января 2021 г.
- ^ Фризенхан, Боб (6 июня 2020 г.). «Re: [Libjpeg-devel-6x] 4 ошибки целочисленного переполнения в libjpeg-9c» . SourceForge.net . СоурсФордж . Проверено 25 января 2021 г.
Единственное беспокойство заключалось в том, что Гвидо Волльбединг вряд ли подписан на этот список, а IJG JPEG по сути разрабатывается одним человеком.
- ^ «Независимая группа JPEG» . Проверено 27 января 2024 г.
- ^ JPEG JFIF
- ^ Описание настроек и опций Jpegcrop
- ^ Киноигры >> Самым большим провалом нашей патентной системы было... Архивировано 1 сентября 2012 г. в Wayback Machine.
- ^ 680385 - Firefox не отображает файлы JPEG с арифметической кодировкой.
- ^ Новые возможности jpegtran
- ^ Домашняя страница JPEG
- ^ «libjpeg-турбо» . libjpeg-турбо .
- ^ Jump up to: а б Андре Крамер (heise.de-Newsticker), 14 января 2013 г.: Кодер Mozilla улучшает сжатие JPEG
- ↑ Себастьян Грюнер, 16 июля 2014 г.: MozJPEG 2.0: Facebook поддерживает кодировщик JPEG Mozilla.
- ^ «CloudFlare хочет внести свой вклад в разработку JPEG-кодировщика Mozilla» . 30 июля 2014 г.
- ^ Jump up to: а б «ISO/IEC 10918-7:2019 Информационные технологии. Цифровое сжатие и кодирование неподвижных изображений с непрерывным тоном. Часть 7. Справочное программное обеспечение» . ИСО . «T.873 (19 мая): Информационные технологии. Цифровое сжатие и кодирование неподвижных изображений с непрерывным тоном: Справочное программное обеспечение» . www.itu.int .
- ^ «Представляем Jpegli: новую библиотеку кодирования JPEG» . Блог Google с открытым исходным кодом. 3 апреля 2024 года. Архивировано из оригинала 3 апреля 2024 года . Проверено 4 апреля 2024 г.
- ^ Jump up to: а б «libjpeg: обзор изменений API/ABI» . Проверено 28 октября 2017 г.
- ^ Jump up to: а б Манс Рулгард (Hardwarebug.org), 4 августа 2009 г.: IJG вернулся. Архивировано 16 июля 2014 г. на Wayback Machine.
- ^ Jump up to: а б Том Лейн, 16 января 2013 г.: jpeg-9, совместимость API/ABI и будущая роль этого проекта.
- ^ Jump up to: а б «А как насчет libjpeg v9?» . команда libjpeg-turbo . Проверено 8 февраля 2013 г.
- ↑ Манс Рулгард (Hardwarebug.org), 1 февраля 2010 г.: IJG снова замахивается и промахивается.
- ^ «Кодирование неподвижных изображений на основе ITU-T T.81 (JPEG-1) с использованием альтернативного арифметического кодера» (pdf). Сентябрь 2009 года.
- ^ Jump up to: а б «libjpeg-turbo | О проекте / Исследование полезности масштабирования DCT и SmartScale» . libjpeg-turbo.org .
- ^ Предложение ITU-T JPEG-Plus R3
- ^ Эволюция JPEG
- ^ JPEG 9 Кодирование без потерь
- ^ «Либджпег» . Гитхаб . 6 октября 2021 г.
- ^ Программное обеспечение, которое использует или предоставляет libjpeg-turbo . 9 февраля 2012 г.
- ^ Проблема 48789 — хром — используйте libjpeg-turbo вместо libjpeg . 14 апреля 2011 г.
- ^ Ошибка 698519 — Обновление до libjpeg-turbo 1.2 . 28 февраля 2012 г.
- ^ libjpeg для F14 . 9 февраля 2012 г.
- ^ Файл README libjpeg-turbo. Архивировано 14 декабря 2018 г. на Wayback Machine.
- ^ «Релизы · mozilla/mozjpeg» . github.com . Проверено 14 августа 2022 г.
- ↑ Андреас Донат (golem.de), 6 марта 2014 г.: Mozilla хочет лучше сжимать файлы JPEG.
- ^ «Представляем Jpegli: новую библиотеку кодирования JPEG» . Блог Google с открытым исходным кодом. 3 апреля 2024 года. Архивировано из оригинала 3 апреля 2024 года . Проверено 4 апреля 2024 г.
- ^ «Jpeg — Jpeg Xt» .
Внешние ссылки
[ редактировать ]- Официальный сайт независимой JPEG Group
- JPEGclub – Дополнительные возможности libjpeg.
- JPEG: часто задаваемые вопросы
- libjpeg-turbo — ABI-/API-совместимая версия libjpeg, которая использует SIMD-инструкции x86 для достижения существенного ускорения по сравнению с эталонной реализацией.
- MozJPEG — форк оптимизации размера файла на GitHub
- Найман, Роберт; Аас, Джош (6 августа 2014 г.). «Использование MozJPEG для создания эффективных файлов JPEG» . Хаки . Мозилла.
- Jpegli на GitHub , улучшенная реализация кодировщика и декодера JPEG.