Jump to content

QOI (формат изображения)

Вполне нормальное изображение
Расширение имени файла
.который
Магическое число qoif (4 байта, ASCII)
Разработано Доминик Шаблевски
Первоначальный выпуск 24 ноября 2021 г.
Последний выпуск
1.0
5 января 2022 г .; 2 года назад ( 05.01.2022 )
Тип формата изображения без потерь растрового Формат
Стандартный Спецификация
Открытый формат ? Да
Свободный формат ? Да
Веб-сайт qoiformat.org

Формат изображения Quite OK ( QOI ) — это спецификация для без потерь изображений сжатия 24-битных (8 бит на цвет RGB ) или 32-битных (8 бит на цвет с 8-битным альфа- каналом RGBA ) цветных растровых (растровых) изображений, изобретен Домиником Шаблевски и впервые анонсирован 24 ноября 2021 года. [1]

Описание [ править ]

Предполагаемой целью было создание с открытым исходным кодом метода сжатия без потерь , который был бы быстрее и проще в реализации, чем PNG . Цифры, указанные в сообщении блога, анонсирующем формат, утверждают, что кодирование происходит в двадцать-пятьдесят раз быстрее, а скорость декодирования в три-четыре раза выше, чем в PNG, при аналогичных размерах файлов. [1] Автор передал спецификацию в общественное достояние ( CC0 ). [2]

и языковая поддержка обеспечение Программное

QOI изначально поддерживается ImageMagick , [3] Imagine (v1.3.9+), IrfanView (v4.60+), [4] FFmpeg (v5.1+), [5] и Графический конвертер (v11.8+). [6] Microsoft PowerToys (v0.76+) для Windows 10 и 11 добавляет поддержку предварительного просмотра изображений QOI в проводнике Windows. [7] [8] созданные сообществом, Плагины, доступны в GIMP , Paint.NET и XnView MP . [9]

Игровой движок GameMaker определяет bzip2 + QOI в качестве формата групп текстур по умолчанию , начиная с версии 2022.1.0.609, для достижения лучшего сжатия, но при этом более быстрого распаковывания, в то время как автономные форматы QOI и PNG являются необязательными для еще большей производительности и лучшей совместимости соответственно. . [10] [11]

Существуют также реализации для различных языков, таких как Rust , Python , Java , C++ , C# и других. [12] Полный список можно найти в README репозитория Git(Hub) проекта .

Формат файла [ править ]

Заголовок [ править ]

Файл QOI состоит из 14-байтового заголовка, за которым следует любое количество «фрагментов» данных и 8-байтовый маркер конца.

qoi_header {
    char magic[4]; // magic bytes "qoif"
    uint32_t width; // image width in pixels (BE)
    uint32_t height; // image height in pixels (BE)
    uint8_t channels; // 3 = RGB, 4 = RGBA
    uint8_t colorspace; // 0 = sRGB with linear alpha
// 1 = all channels linear
};

Поля цветового пространства и канала носят чисто информативный характер. Они не меняют способ кодирования фрагментов данных.

Кодировка [ править ]

Изображения кодируются построчно, слева направо, сверху вниз. декодер и кодер начинаются с {r: 0, g: 0, b: 0, a: 255} как предыдущее значение пикселя. Изображение считается полным, когда все пиксели, указанные в width * height были покрыты. Пиксели кодируются как:

  • Кодирование длины серии предыдущего пикселя ( QOI_OP_RUN)
  • индекс в массиве ранее увиденных пикселей ( QOI_OP_INDEX)
  • разница по сравнению с предыдущим значением пикселя в r,g,b ( QOI_OP_DIFF или QOI_OP_LUMA)
  • Полные значения r,g,b или r,g,b,a ( QOI_OP_RGB или QOI_OP_RGBA)

Предполагается, что цветовые каналы не умножаются предварительно на альфа-канал («альфа без предварительного умножения»). Бег array[64] (инициализировано нулем) ранее увиденного пикселя значения поддерживаются кодером и декодером. Каждый пиксель, видимый кодером и декодером, помещается в этот массив в позицию, образованную хэш-функцией значения цвета.

В кодировщике, если значение пикселя по индексу соответствует текущему пикселю, эта позиция индекса записывается в поток как QOI_OP_INDEX. Хэш-функция для индекса:

index_position = (r * 3 + g * 5 + b * 7 + a * 11) % 64

Каждый фрагмент начинается с 2- или 8-битного тега, за которым следует несколько битов данных. Разрядность фрагментов делится на 8, т.е. все фрагменты выровнены по байтам. Все значения, закодированные в этих битах данных, имеют старший бит слева. 8-битные теги имеют приоритет над 2-битными тегами. Декодер должен сначала проверить наличие 8-битного тега. Конец потока байтов отмечен цифрой 7. 0x00 байты, за которыми следует один 0x01 байт.

Возможные фрагменты:

QOI_OP_RGB[ редактировать ]

Байт[0] Байт[1] Байт[2] Байт[3]
7 6 5 4 3 2 1 0 7 .. 0 7 .. 0 7 .. 0
1 1 1 1 1 1 1 0 красный зеленый синий
  • 8-битный день b11111110 (254)
  • 8-битное значение красного канала
  • 8-битное значение зеленого канала
  • 8-битное значение синего канала

Значение альфа остается неизменным по сравнению с предыдущим пикселем.

QOI_OP_RGBA[ редактировать ]

Байт[0] Байт[1] Байт[2] Байт[3] Байт[4]
7 6 5 4 3 2 1 0 7 .. 0 7 .. 0 7 .. 0 7 .. 0
1 1 1 1 1 1 1 1 красный зеленый синий альфа
  • 8-битный день b11111111 (255)
  • 8-битное значение красного канала
  • 8-битное значение зеленого канала
  • 8-битное значение синего канала
  • 8-битное значение альфа-канала

QOI_OP_INDEX[ редактировать ]

Байт[0] (диапазон: 0 .. 63)
7 6 5 4 3 2 1 0
0 0 индекс
  • 2-битный день b00
  • 6-битный индекс в массиве индексов цвета: 0..63

Действительный кодер не должен выдавать 2 или более последовательных QOI_OP_INDEX фрагменты по одному и тому же индексу. QOI_OP_RUN вместо этого следует использовать.

QOI_OP_DIFF[ редактировать ]

Байт[0] (диапазон: 64 .. 127)
7 6 5 4 3 2 1 0
0 1 доктор дг БД
  • 2-битный день b01
  • 2-битная разница красного канала с предыдущим пикселем -2..1
  • Отличие зеленого канала на 2 бита от предыдущего пикселя -2..1
  • 2-битная разница синего канала с предыдущим пикселем -2..1

Разница с текущими значениями канала заключается в использовании операции переноса , поэтому 1 - 2 приведет к 255, в то время как 255 + 1 приведет к 0.

Значения сохраняются как целые числа без знака со смещением 2. Например, −2 сохраняется как 0 ( b00). 1 сохраняется как 3 ( b11). Значение альфа остается неизменным по сравнению с предыдущим пикселем.

QOI_OP_LUMA[ редактировать ]

Байт[0] (диапазон: 128 .. 191) Байт[1]
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
1 0 дг доктор - дг дб - дг
  • 2-битный день b10
  • Отличие 6-битного зеленого канала от предыдущего пикселя -32..31
  • 4-битная разница красного канала минус разница зеленого канала -8..7
  • 4-битная разница синего канала минус разница зеленого канала -8..7

Зеленый канал используется для указания общего направления изменения и кодируется 6 битами. Красный и синий каналы (dr и db) основывают свои различия на разнице зеленых каналов. Т.е.:

dr_dg = (cur_px.r - prev_px.r) - (cur_px.g - prev_px.g)
db_dg = (cur_px.b - prev_px.b) - (cur_px.g - prev_px.g)

Разница с текущими значениями канала заключается в использовании операции переноса, поэтому 10 - 13 приведет к 253, в то время как 250 + 7 приведет к 1.

Значения сохраняются как целые числа без знака со смещением 32 для зеленого канала и смещением 8 для красного и синего каналов. Значение альфа остается неизменным по сравнению с предыдущим пикселем.

QOI_OP_RUN[ редактировать ]

Байт[0] (диапазон: 192 .. 253)
7 6 5 4 3 2 1 0
1 1 бегать
  • 2-битный день b11
  • 6-битная длина серии, повторяющая предыдущий пиксель

Длина серии сохраняется со смещением -1. Обратите внимание, что длины 63 и 64 ( b111110 и b111111) являются незаконными, поскольку они заняты QOI_OP_RGB и QOI_OP_RGBA теги. [13]

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

  1. ^ Jump up to: Перейти обратно: а б «Сжатие изображений без потерь за время O(n)» . Phoboslab.org . 2021-11-24. Архивировано из оригинала 8 мая 2022 г. Проверено 1 мая 2022 г.
  2. ^ «QOI Вполне приемлемый формат изображения» . qoiformat.org . 14 декабря 2023 г. Архивировано из оригинала 16 декабря 2023 г. Проверено 14 декабря 2023 г.
  3. ^ «ImageMagick — Форматы изображений» . Архивировано из оригинала 2 января 2022 года . Проверено 4 мая 2022 г.
  4. ^ «История изменений/версий IrfanView» . www.irfanview.com . Архивировано из оригинала 14 января 2021 г. Проверено 10 мая 2022 г.
  5. ^ «Журнал изменений FFmpeg — Gitweb» . ffmpeg.org . Архивировано из оригинала 13 июля 2022 г. Проверено 13 июля 2022 г.
  6. ^ «Примечания к выпуску GraphicsConverter, версия 11.8 (сборка 5762)» . Программное обеспечение Лемке . Архивировано из оригинала 11 февраля 2023 года . Проверено 21 февраля 2023 г.
  7. ^ «Релиз v0.76.0» . Майкрософт . Проверено 26 марта 2024 г.
  8. ^ «Утилита дополнений PowerToys File Explorer для Windows» . Learn.microsoft.com . 04.12.2023 . Проверено 5 февраля 2024 г.
  9. ^ Джеймс Хейн. «Перемещение изображений на новый уровень» . Почта Бангкока . Проверено 1 апреля 2022 г.
  10. ^ «Версия 2022.1.0.609» . Примечания к выпуску GameMaker . Йо-йо игры. 26 января 2022 г. . Проверено 26 марта 2024 г.
  11. ^ «Группы текстур» . Руководство гейммейкера . Йо-йо игры . Проверено 26 марта 2024 г.
  12. ^ Саймон Шарвуд. «Разработчик создает «вполне приемлемый формат изображения», но он работает лучше, чем просто «хороший» . Регистр . Архивировано из оригинала 2 июня 2023 г. Проверено 30 декабря 2023 г.
  13. ^ Шаблевски, Доминик (05 января 2022 г.). «Вполне хорошая спецификация формата изображения» (PDF) . Архивировано (PDF) из оригинала 30 апреля 2022 г. Проверено 5 июня 2022 г. Общественное достояние В данную статью включен текст из этого источника, находящегося в свободном доступе .

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1dd619fc14b461bdf1a1543d4fcecf9c__1716747060
URL1:https://arc.ask3.ru/arc/aa/1d/9c/1dd619fc14b461bdf1a1543d4fcecf9c.html
Заголовок, (Title) документа по адресу, URL1:
QOI (image format) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)