Доступна библиотека libjpeg-turbo 3.0

Спустя пять лет с момента формирования ветки 2.x представлен релиз libjpeg-turbo 3.0.0, высокопроизводительной библиотеки для кодирования и декодирования изображений в формате JPEG. Libjpeg-turbo представляет собой совместимый на уровне API/ABI форк классической библиотеки libjpeg, нацеленный на обеспечение максимальной скорости кодирования и декодирования. Кроме стандартного libjpeg API библиотека предоставляет собственный TurboJPEG API и ряд расширений с моделями представления цвета, дающих возможность сжимать изображения в 32-разрядные пиксельные буферы (RGBX, XBGR) или декодировать из них. Код распространяется под тремя BSD-подобными лицензиями IJG, модифицированной BSD и zlib, бинарные сборки подготовлены для Linux (rpm, deb), macOS и Windows.

По сравнению с libjpeg библиотека libjpeg-turbo позволяет добиться ускорения операций кодирования и декодирования JPEG в 2–4 раза, благодаря использованию инструкций SIMD (MMX, SSE2, NEON, AltiVec VMX) на архитектурах x86, x86–64, PowerPC и ARM. На других архитектурах ускорение не столь значительное, но за счёт применения оптимизированных функций кодирования Хаффмана библиотека всё равно заметно быстрее libjpeg и близка по своим показателям к высококачественным проприетарным кодекам JPEG. Отдельно развивается mozjpeg, форк libjpeg-turbo, который движется в сторону оптимизации размера результирующих изображений.

Основные новшества:

  • Добавлена поддержка цветовой субдискретизации 4:1:1, позволяющей без потери качества преобразовывать, обрезать и поворачивать JPEG-изображения с субдискретизацией 4:1:1, а также распаковывать их и переводить в цветовую модель YUV.

  • Значительно ускорены вычисления оптимальных таблиц Хаффмана. Для мелких изображений (256×256) изменение позволило до двух раз сократить время сжатия.

  • Добавлена возможность применения арифметического энтропийного кодирования для JPEG-изображений с 12-битным представлением цвета на канал.

  • С целью устранения имевшихся ограничений и повышения расширяемости значительно переработан API TurboJPEG. Например, все Си-функции теперь снабжены префиксом «tj3». Многие флаги и режимы преобразованы из аргументов функций в общие параметры API.

  • В API libjpeg и TurboJPEG добавлена поддержка изображений с 12 и 16 битами цветности на канал в режимах с потерей и без потери качества.

  • Добавлен режим работы с JPEG-файлами без потери качества, который доступен для изображений с 8, 12 и 16 битами цветности на канал. Добавлена новая функция jpeg_enable_lossless () и опция командной строки »-lossless».

  • Удалены устаревшие поля, конструкторы и методы в TurboJPEG Java API.

В дальнейшем автор libjpeg-turbo намерен ограничить работу над проектом и выпускать только обновления с исправлениями ошибок. Разработка новой ветки 3.1 не начнётся пока не удастся получить финансирование работы над проектом. Сейчас получаемых для libjpeg-turbo средств хватает на 8–10 часов работы в месяц и в проекте наблюдается перерасход — при финальной стадии стабилизации ветки 3.0 ресурсы уже потрачены наперёд до сентября 2024 года. До получения финансирования работа над реализацией и рассмотрением новых возможностей для libjpeg-turbo будет приостановлена, а техническая поддержка выпусков будет ограничена, как минимум в течение следующих 15 месяцев. Основной доход автор libjpeg-turbo получает от других своих проектов — VirtualGL и TurboVNC, которым он намерен уделить первичное внимание, чтобы не повторить негативный опыт разработки ветки libjpeg-turbo 2.0, который привёл к тому, что из-за отсутствия контроля над трудозатратами разработчик был вынужден влезть в долги.



Источник: http://www.opennet.ru/opennews/art.shtml? num=59378

© OpenNet