27.01.2022

Представлен формат сжатия изображений QOI

Представлен новый легковесный формат сжатия изображений без потерь — QOI (Quite OK Image), позволяющий очень быстро сжимать изображения в цветовых пространствах RGB и RGBA. При сравнении производительности с форматом PNG однопоточная эталонная реализация формата QOI на языке Си, не использующая SIMD-инструкции и ассемблерные оптимизации, по скорости кодирования в 20-50 раз превосходит библиотеки libpng и stb_image, а по скорости декодирования в 3-4 раза. По эффективности сжатия QOI в большинстве тестов близок к libpng (в каких-то тестах немного опережает, а в каких-то проигрывает), но в целом заметно опережает stb_image (выигрыш вплоть до 20%).

Эталонная реализация QOI на языке Си насчитывает всего 300 строк кода. Исходные тексты распространяются под лицензией MIT. Дополнительно энтузиастами подготовлены реализации кодировщиков и декодировщиков на языках Go, Zig и Rust. Проект развивает Доменик Саблевский (Dominic Szablewski), разработчик игр, имеющий опыт создания библиотеки для декодирования видео в формате MPEG1. При помощи формата QOI автор хотел показать, что возможно создание эффективной и простой альтернативы переусложнённым современным форматам кодирования изображений.

Производительность QOI не зависит от размера и характера кодируемого изображения (O(1)). Кодирование и декодирование выполняется в один проход — каждый пиксель обрабатывается только один раз и может кодироваться одним из 4 способов, выбираемых в зависимости от значений прошлых пикселей. Если очередной пиксель совпадает с предыдущим, то лишь увеличивается счётчик повторений. Если пиксель совпадает с одним из значений в буфере 64 прошлых пикселей, то вместо значения указывается 6-битовое смещение на прошлый пиксель. Если цвет прошлого пикселя незначительно отличается, в короткой форме указывается различие (сокращённое кодировние различий цветовых составляющих, укладывающихся в 2,4 и 5 бита). Если оптимизация не применима, указывается полное значение rgba.

Источник.