Представлен новый легковесный формат сжатия изображений без потерь - 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(п)). Кодирование и декодирование выполняется в один проход - каждый пиксель обрабатывается только один раз и может кодироваться одним из 4 способов, выбираемых в зависимости от значений прошлых пикселей. Если очередной пиксель совпадает с предыдущим, то лишь увеличивается счётчик повторений. Если пиксель совпадает с одним из значений в буфере 64 прошлых пикселей, то вместо значения указывается 6-битовое смещение на прошлый пиксель. Если цвет прошлого пикселя незначительно отличается, в короткой форме указывается различие (сокращённое кодировние различий цветовых составляющих, укладывающихся в 2,4 и 5 бита). Если оптимизация не применима, указывается полное значение rgba.
Opennet
Эталонная реализация QOI на языке Си насчитывает всего 300 строк кода. Исходные тексты распространяются под лицензией MIT. Дополнительно энтузиастами подготовлены реализации кодировщиков и декодировщиков на языках Go, Zig и Rust. Проект развивает Доменик Саблевский (Dominic Szablewski), разработчик игр, имеющий опыт создания библиотеки для декодирования видео в формате MPEG1. При помощи формата QOI автор хотел показать, что возможно создание эффективной и простой альтернативы переусложнённым современным форматам кодирования изображений.
Производительность QOI не зависит от разрешения и характера кодируемого изображения (O(п)). Кодирование и декодирование выполняется в один проход - каждый пиксель обрабатывается только один раз и может кодироваться одним из 4 способов, выбираемых в зависимости от значений прошлых пикселей. Если очередной пиксель совпадает с предыдущим, то лишь увеличивается счётчик повторений. Если пиксель совпадает с одним из значений в буфере 64 прошлых пикселей, то вместо значения указывается 6-битовое смещение на прошлый пиксель. Если цвет прошлого пикселя незначительно отличается, в короткой форме указывается различие (сокращённое кодировние различий цветовых составляющих, укладывающихся в 2,4 и 5 бита). Если оптимизация не применима, указывается полное значение rgba.
Opennet