Formato de compressão de imagem QOI introduzido

Foi introduzido um novo formato de compactação de imagem leve e sem perdas - QOI (Quite OK Image), que permite compactar imagens muito rapidamente nos espaços de cores RGB e RGBA. Ao comparar o desempenho com o formato PNG, a implementação de referência de thread único do formato QOI na linguagem C, que não usa instruções SIMD e otimizações de montagem, é 20-50 vezes mais rápida em velocidade de codificação do que as bibliotecas libpng e stb_image, e 3 -4 vezes mais rápido na velocidade de decodificação. Em termos de eficiência de compressão, o QOI está próximo do libpng na maioria dos testes (em alguns testes está um pouco à frente e em outros é inferior), mas em geral está visivelmente à frente do stb_image (ganho de até 20%).

A implementação de referência de QOI em C tem apenas 300 linhas de código. O código-fonte é distribuído sob a licença do MIT. Além disso, os entusiastas prepararam implementações de codificadores e decodificadores nas linguagens Go, Zig e Rust. O projeto está sendo desenvolvido por Dominic Szablewski, desenvolvedor de jogos com experiência na criação de uma biblioteca para decodificação de vídeo MPEG1. Usando o formato QOI, o autor queria mostrar que é possível criar uma alternativa simples e eficaz aos formatos de codificação de imagem modernos e excessivamente complicados.

O desempenho do QOI é independente da resolução e natureza da imagem codificada (O(n)). A codificação e a decodificação são realizadas em uma passagem - cada pixel é processado apenas uma vez e pode ser codificado de 4 maneiras, selecionadas dependendo dos valores dos pixels anteriores. Se o próximo pixel coincidir com o anterior, o contador de repetições apenas aumenta. Se o pixel corresponder a um dos valores no buffer de 64 pixels anteriores, o valor será substituído por um deslocamento de 6 bits em relação ao pixel anterior. Se a cor do pixel anterior for ligeiramente diferente, a diferença é indicada de forma abreviada (codificação curta das diferenças nos componentes de cor que cabem em 2,4, 5 e XNUMX bits). Se a otimização não for aplicável, o valor RGBA completo será fornecido.

Fonte: opennet.ru

Adicionar um comentário