Ipinakilala ang QOI image compression format

Isang bagong magaan, walang pagkawalang format ng compression ng imahe ay ipinakilala - QOI (Medyo OK na Larawan), na nagbibigay-daan sa iyo upang mabilis na i-compress ang mga imahe sa mga puwang ng kulay ng RGB at RGBA. Kapag ikinukumpara ang performance sa PNG format, ang single-threaded reference na pagpapatupad ng QOI format sa C language, na hindi gumagamit ng SIMD instructions at assembly optimizations, ay 20-50 beses na mas mabilis sa bilis ng pag-encode kaysa sa libpng at stb_image library, at 3 -4 na beses na mas mabilis sa bilis ng pag-decode. Sa mga tuntunin ng kahusayan ng compression, ang QOI ay malapit sa libpng sa karamihan ng mga pagsubok (sa ilang mga pagsubok ito ay bahagyang nauuna, at sa iba ay mas mababa ito), ngunit sa pangkalahatan ito ay kapansin-pansing nauuna sa stb_image (makakuha ng hanggang 20%).

Ang reference na pagpapatupad ng QOI sa C ay 300 linya lamang ng code. Ang source code ay ipinamahagi sa ilalim ng lisensya ng MIT. Bukod pa rito, naghanda ang mga mahilig sa mga pagpapatupad ng mga encoder at decoder sa mga wikang Go, Zig at Rust. Ang proyekto ay binuo ni Dominic Szablewski, isang developer ng laro na may karanasan sa paglikha ng library para sa pag-decode ng MPEG1 na video. Gamit ang QOI na format, nais ipakita ng may-akda na posible na lumikha ng isang epektibo at simpleng alternatibo sa sobrang kumplikadong modernong mga format ng pag-encode ng imahe.

Ang pagganap ng QOI ay independiyente sa resolution at likas na katangian ng naka-encode na larawan (O(n)). Ang pag-encode at pag-decode ay isinasagawa sa isang pass - ang bawat pixel ay pinoproseso nang isang beses lamang at maaaring i-encode sa isa sa 4 na paraan, pinili depende sa mga halaga ng nakaraang mga pixel. Kung ang susunod na pixel ay tumutugma sa nauna, ang counter ng pag-uulit ay tataas lamang. Kung tumugma ang pixel sa isa sa mga value sa 64 past pixel buffer, ang value ay papalitan ng 6-bit offset sa nakaraang pixel. Kung ang kulay ng nakaraang pixel ay bahagyang naiiba, ang pagkakaiba ay ipinahiwatig sa isang maikling anyo (maikling pag-encode ng mga pagkakaiba sa mga bahagi ng kulay na umaangkop sa 2,4, 5 at XNUMX bits). Kung hindi naaangkop ang pag-optimize, ibibigay ang buong halaga ng rgba.

Pinagmulan: opennet.ru

Magdagdag ng komento