Π’ΡŠΠ²Π΅Π΄Π΅Π½ Π΅ QOI Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° компрСсиранС Π½Π° изобраТСния

Π’ΡŠΠ²Π΅ΠΆΠ΄Π° сС Π½ΠΎΠ², Π»Π΅ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° компрСсиранС Π½Π° изобраТСния Π±Π΅Π· Π·Π°Π³ΡƒΠ±ΠΈ, QOI (Quite OK Image), ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΎ компрСсиранС Π½Π° изобраТСния Π² RGB ΠΈ RGBA Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΈ пространства. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС сравнява производитСлността с PNG Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° имплСмСнтация с Π΅Π΄Π½Π° нишка Π½Π° QOI Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π΅Π·ΠΈΠΊΠ° C, която Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° SIMD инструкции ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° асСмблСр, Π΅ 20-50 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·Π° ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ libpng ΠΈ stb_image ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° скоростта Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ ΠΈ 3-4 ΠΏΡŠΡ‚ΠΈ скорост Π½Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅. По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° СфСктивността Π½Π° компрСсия, QOI Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ тСстовС Π΅ Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ libpng (Π² някои тСстовС Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π½Π°ΠΏΡ€Π΅Π΄, Π° Π² Π΄Ρ€ΡƒΠ³ΠΈ Π³ΡƒΠ±ΠΈ), Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ ΠΏΠΎ-Π½Π°ΠΏΡ€Π΅Π΄ ΠΎΡ‚ stb_image (Π΄ΠΎ 20% ΠΏΠ΅Ρ‡Π°Π»Π±Π°).

Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° рСализация Π½Π° QOI Π² C ΠΈΠΌΠ° само 300 Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT. ОсвСн Ρ‚ΠΎΠ²Π° СнтусиаститС са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€ΠΈ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ΠΈ Π² Go, Zig ΠΈ Rust. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΎΡ‚ Dominic Szablewski, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° ΠΈΠ³Ρ€ΠΈ с ΠΎΠΏΠΈΡ‚ Π² ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° MPEG1 Π²ΠΈΠ΄Π΅ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅. Използвайки QOI Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ искашС Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ Π΅ възмоТно Π΄Π° сС създадС Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° ΠΈ проста Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ слоТнитС ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° изобраТСния.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° QOI Π½Π΅ зависи ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° способност ΠΈ СстСството Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (O(n)). ΠšΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° с Π΅Π΄Π½ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ - всСки пиксСл сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° само вСднъТ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ 4 Π½Π°Ρ‡ΠΈΠ½Π°, ΠΈΠ·Π±Ρ€Π°Π½ΠΈ Π² зависимост ΠΎΡ‚ стойноститС Π½Π° ΠΌΠΈΠ½Π°Π»ΠΈ пиксСли. Ако слСдващият пиксСл съвпаднС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ, Π±Ρ€ΠΎΡΡ‡ΡŠΡ‚ Π½Π° повторСнията само сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°. Ако пиксСл ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π΅Π΄Π½Π° ΠΎΡ‚ стойноститС Π² Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° миналия пиксСл 64, Ρ‚ΠΎΠ³Π°Π²Π° вмСсто стойността сС посочва 6-Π±ΠΈΡ‚ΠΎΠ²ΠΎ отмСстванС спрямо миналия пиксСл. Ако Ρ†Π²Π΅Ρ‚ΡŠΡ‚ Π½Π° послСдния пиксСл сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° Π»Π΅ΠΊΠΎ, Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° сС посочва Π² ΠΊΡ€Π°Ρ‚ΠΊΠ°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° (ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС вписват Π² 2,4 ΠΈ 5 Π±ΠΈΡ‚Π°). Ако Π½Π΅ Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠ° оптимизация, сС посочва ΠΏΡŠΠ»Π½Π°Ρ‚Π° стойност Π½Π° rgba.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€