По някаква причина, всъщност можете да поставите 2 милиона пиксела в изображение, без да използвате 1, 97 мегабайта пространство. Намерих сладък 1080p тапет (който има приблизително 2 милиона пиксела) и го изтеглени. Проверявайки свойствата, забелязах нещо странно: на твърдия диск имаше само 230 KB пространство. Защо така? За някой, който не разбира напълно компресията на изображението, изглежда като магия. Но след като се запознаете с темата, ще разберете как някои изображения са по-големи от другите, въпреки размера на пикселите, които заемат на екрана ви. Времето е кратко, така че нека се вгледаме бързо в основните принципи зад компресията на изображението.

Методи, подходи, алгоритми.

Не е наивно да мислим, че има само един начин да компресирате изображение. Има различни методи, всеки с уникален подход към общ проблем и всеки подход се използва в различни алгоритми за постигане на подобно заключение. Всеки алгоритъм се представя от файлов формат (PNG, JPG, GIF и др.). Засега ще говорим за методите, които обикновено се използват за компресиране на изображения, което ще обясни защо някои от тях заемат толкова много по-малко пространство.

Без загуба на компресия

Когато мислите за думата "без загуби" в контекста на компресирането на изображения, вероятно мислите за метод, който се опитва най-трудно да запази качеството си, като същевременно запазва сравнително малък размер на изображението. Това е много близко до истината. Като метод, компресията без загуба намалява до минимум изкривяването, като запазва яснотата на изображението. Това става чрез създаване на индекс на всички пиксели и групиране на едноцветни пиксели заедно. Това е нещо като компресията на файловете, освен че имаме работа с по-малки единици данни.

DEFLATE е сред най-често срещаните алгоритми за този вид работа. Той се основава на два други алгоритми (Huffman и LZ77, ако сте книжни червеи) и има много опитен и истински начин за групиране на данните, намиращи се в изображенията. Вместо просто да минава през дължината на данните и да съхранява множество копия на пиксел с един и същ цвят в единична единица данни (известна като кодиране за дължина на изпълнение), тя хваща дублиращи струни, намерени в целия код и определя "показалец" за всеки дубликат, намерен. Където често се използва конкретен низ от данни (пиксели), той замества всички тези пиксели с претеглена стойност, която допълнително компресира всичко.

Забележете как с кодиране за дължина на дължината и DEFLATE, никой от пикселите всъщност не е изяден или принуден да промени цвета си. Използването на този метод само води до изображение, което е идентично на суровия оригинал. Единствената разлика между двете се крие в това колко пространство всъщност се поема на вашия твърд диск!

Загуба на компресия

Както подсказва името, загубата на компресия прави изображението да загуби част от съдържанието си. Когато се предприеме твърде далеч, всъщност може да направи изображението неразпознаваемо. Но загубата не означава, че премахвате пикселите. Всъщност съществуват два алгоритми, които обикновено се използват за компресиране на изображения по този начин: трансформиране на кодирането и подмамриране на хрома . Първият е по-често срещан в изображенията, а последният във видео.

С кодирането на трансформацията цветовете на изображението се осредняват, като се използва специална математическа формула, наречена дискретна косинусова трансформация. Изображението страда от загуба на цвят и може да въведе артефакти (странно пикселиране в произволни точки на изображението), когато се използва прекомерно. Този конкретен алгоритъм компенсира несигурността си със силно предимство: Можете да диктувате колко точно качество искате да останете с изображението. С компресията без загуба, най-близкото можете да постигнете цялостно манипулиране на качеството е чрез задаване на броя на цветовете, които трябва да има всяко изображение.

Chroma subsampling използва друг подход. Вместо да осреднявате малки цветни блокове, които също могат да повлияят на яркостта на изображението, внимателно се опитва да запази яркостта си еднакво във всички области. Това подсказва очите ви, като не забелязвате никакво потапяне в качеството. Това всъщност е чудесно за компресията на анимации, поради което се използва повече в потоците от видео. Това не означава, че изображенията не използват този алгоритъм.

Но изчакайте, има още! Google също изстреля нов алгоритъм за загуби, известен като WebP. Вместо да осреднява цветната информация, тя прогнозира цвета на пиксела, като разглежда фрагментите около него. Данните, които действително са записани в полученото компресирано изображение, са разликата между предсказания цвят и действителния цвят. В крайна сметка много от прогнозите ще бъдат точни, което ще доведе до нула. И вместо да отпечатва цял куп нули, просто ги компресира в един символ, който ги представя. Точността на изображението е подобрена, а компресията намалява размера на изображението с 25% в сравнение с другите алгоритми за загуби, според Google.

Време е за въпроси и дискусии!

Ако сте нов в света на файловете с изображения, най-вероятно ще намерите поне част от тази информация объркваща. Ако имате въпрос, публикувайте го в коментарите и ще направим всичко възможно, за да му отговорим. В противен случай можете да обсъдите това!