Format kompresi gambar QOI diperkenalkan

Format kompresi gambar baru yang ringan dan lossless telah diperkenalkan - QOI (Quite OK Image), yang memungkinkan Anda mengompresi gambar dengan sangat cepat dalam ruang warna RGB dan RGBA. Saat membandingkan kinerja dengan format PNG, implementasi referensi single-thread dari format QOI dalam bahasa C, yang tidak menggunakan instruksi SIMD dan optimasi perakitan, memiliki kecepatan pengkodean 20-50 kali lebih cepat daripada perpustakaan libpng dan stb_image, dan 3 -4 kali lebih cepat dalam kecepatan decoding. Dalam hal efisiensi kompresi, QOI mendekati libpng di sebagian besar pengujian (dalam beberapa pengujian sedikit lebih unggul, dan di pengujian lain lebih rendah), tetapi secara umum jauh lebih unggul dari stb_image (peningkatan hingga 20%).

Referensi implementasi QOI di C hanya 300 baris kode. Kode sumber didistribusikan di bawah lisensi MIT. Selain itu, para peminat telah menyiapkan implementasi encoder dan decoder dalam bahasa Go, Zig, dan Rust. Proyek ini dikembangkan oleh Dominic Szablewski, seorang pengembang game dengan pengalaman membuat perpustakaan untuk mendekode video MPEG1. Dengan menggunakan format QOI, penulis ingin menunjukkan bahwa adalah mungkin untuk menciptakan alternatif yang efektif dan sederhana terhadap format pengkodean gambar modern yang terlalu rumit.

Performa QOI tidak bergantung pada resolusi dan sifat gambar yang dikodekan (O(n)). Pengkodean dan penguraian kode dilakukan dalam satu lintasan - setiap piksel diproses hanya sekali dan dapat dikodekan dengan salah satu dari 4 cara, dipilih tergantung pada nilai piksel sebelumnya. Jika piksel berikutnya bertepatan dengan piksel sebelumnya, maka penghitung pengulangan hanya bertambah. Jika piksel cocok dengan salah satu nilai dalam buffer 64 piksel terakhir, maka nilai tersebut diganti dengan offset 6-bit ke piksel sebelumnya. Jika warna piksel sebelumnya sedikit berbeda, perbedaannya ditunjukkan dalam bentuk pendek (pengkodean singkat perbedaan komponen warna yang masuk ke dalam 2,4, 5 dan XNUMX bit). Jika pengoptimalan tidak dapat diterapkan, nilai rgba penuh akan diberikan.

Sumber: opennet.ru

Tambah komentar