Ներկայացվել է QOI պատկերի սեղմման ձևաչափը

Ներկայացվել է պատկերի սեղմման նոր, թեթև, անկորուստ ձևաչափ՝ QOI (Quite OK Image), որը թույլ է տալիս շատ արագ սեղմել պատկերը RGB և RGBA գունային տարածություններում: Գործողությունը PNG ձևաչափի հետ համեմատելիս, C լեզվով QOI ձևաչափի միակողմանի հղման իրականացումը, որը չի օգտագործում SIMD հրահանգներ և ասեմբլերի օպտիմալացում, 20-50 անգամ ավելի արագ է, քան libpng և stb_image գրադարանները կոդավորման արագությամբ, և 3-4 անգամ վերծանման արագությամբ: Կոմպրեսիոն արդյունավետության առումով QOI-ն շատ թեստերում մոտ է libpng-ին (որոշ թեստերում այն ​​փոքր-ինչ առաջ է, իսկ որոշներում՝ կորցնում), բայց ընդհանուր առմամբ նկատելիորեն առաջ է stb_image-ից (մինչև 20% շահույթ):

QOI հղումների իրականացումը C-ում ունի ընդամենը 300 տող կոդ: Աղբյուրի կոդը տարածվում է MIT լիցենզիայի ներքո: Բացի այդ, էնտուզիաստները պատրաստել են կոդավորիչների և ապակոդավորիչների ներդրում Go, Zig և Rust-ում: Նախագիծը մշակում է Դոմինիկ Շաբլևսկին, որը խաղերի մշակողն է, ով ունի MPEG1 տեսանյութերի վերծանման գրադարան ստեղծելու փորձ: Օգտագործելով QOI ձևաչափը՝ հեղինակը ցանկացել է ցույց տալ, որ հնարավոր է ստեղծել արդյունավետ և պարզ այլընտրանք պատկերների կոդավորման գերբարդ ժամանակակից ձևաչափերին:

QOI-ի կատարումը կախված չէ կոդավորված պատկերի լուծաչափից և բնույթից (O(n)): Կոդավորումը և վերծանումն իրականացվում է մեկ անցումով. յուրաքանչյուր պիքսել մշակվում է միայն մեկ անգամ և կարող է կոդավորվել 4 եղանակներից մեկով, որոնք ընտրվում են՝ կախված անցյալի պիքսելների արժեքներից: Եթե ​​հաջորդ պիքսելը համընկնում է նախորդի հետ, ապա կրկնությունների հաշվիչը միայն մեծանում է: Եթե ​​պիքսելը համապատասխանում է անցյալ 64 պիքսելային բուֆերի արժեքներից մեկին, ապա արժեքի փոխարեն նշվում է 6-բիթանոց շեղում անցյալի պիքսելին: Եթե ​​վերջին պիքսելի գույնը փոքր-ինչ տարբերվում է, տարբերությունը նշվում է կարճ ձևով (գունային բաղադրիչների տարբերությունների կրճատ կոդավորումը, որը տեղավորվում է 2,4 և 5 բիթերի մեջ): Եթե ​​օպտիմալացում չի կիրառվում, ապա նշվում է rgba-ի ամբողջական արժեքը:

Source: opennet.ru

Добавить комментарий