Как действа това?
За да отговорите на този въпрос, бихте могли да обясните някои много сложни математически задачи, със сигурност повече, отколкото можем да покрием в тази статия, но не е нужно да разбирате точно как работи математически, за да разбере основните неща.
Най-популярните библиотеки за компресиране на текст разчитат на два алгоритми за компресиране, като използват едновременно и двете, за да постигнат много високи съотношения на компресия. Тези два алгоритъма са "LZ77" и "Huffman кодиране". Кодирането на Huffman е доста сложно и няма да се вмъкваме в подробности за това тук. Първоначално той използва някои фантастични математически задачи, които дават по-кратък срокдвоични кодове към отделни букви, свиване на размерите на файловете в процеса. Ако искате да научите повече за това, разгледайте тази статия относно начина, по който работи този код или този обяснител от Computerphile.
LZ77, от друга страна, е относително проста и за какво ще говорим тук. Тя се стреми да премахне дублиращите се думи и да ги замени с по-малък "ключ", който представлява думата.
Запишете този кратък текст например:
Ние наричаме компресия като тази "без загуби" - данните, които въвеждате, са същите като данните, които излизате. Нищо не се губи.
В действителност, LZ77 не използва списък с клавиши, а замества второто и третото събитие с обратна връзка в паметта:
Ако се интересувате от по-подробно обяснение, това видео от Computerphile е доста полезно.
Сега това е идеализиран пример. В действителност, повечето текстове се компресират с клавиши, които са само няколко знака. Например, думата "на" би била компресирана дори когато се появява с думи като "там", "тях" и "след това". С повтарящ се текст можете да получите някои луди съотношения на компресия. Вземете този текстов файл с думата "howtogeek", който се повтаря 100 пъти. Оригиналният текстов файл има размер от три килобайта. Когато се компресира, тя отнема само 158 байта. Това е почти 95% компресия.
Този алгоритъм на LZ77 се отнася за всички двоични данни, между другото, а не само за текста, макар че текстът обикновено е по-лесен за компресиране поради колко многократни думи използват повечето езици. Език като китайски може да бъде малко по-трудно да се компресира от английски, например.
Как се работи с компресията на изображения и видеоклипове?
Това води до онези ужасни изглеждащи JPEG, които хората са качили, споделят и са заснети на екрана няколко пъти. Всеки път, когато изображението се компресира, то губи известни данни.
Ето един пример. Това е екранна снимка, която взех, която изобщо не е компресирана.
Е, това е само най-лошият сценарий, който експортира при 0% JPEG качество всеки път. За сравнение, тук е 50% качество на JPEG, което е почти неразличимо от изображението PNG на изход, освен ако не го взривите и погледнете отблизо.
И така, как спестява толкова много пространство? Ами, алгоритъмът JPEG е подвиг на инженерството. Повечето изображения съхраняват списък с номера, като всеки номер представлява един пиксел.
JPEG не прави нищо от това. Вместо това, той съхранява изображения, използвайки нещо, наречено дискретно косинус трансформация, което е колекция от синусоидални вълни, прибавени заедно при различни интензитети. Той използва 64 различни уравнения, но повечето от тях не се използват. Това е, което прави плъзгачът за качество за JPEG във Photoshop и други приложения за изображения - изберете колко уравнения да използвате. Приложенията след това използват Huffman кодиране, за да намалят размера на файла още повече.
Това дава на JPEGs невероятно високо съотношение на компресия, което може да намали файла, който ще бъде няколко мегабайта до няколко килобайта, в зависимост от качеството. Разбира се, ако го използвате прекалено много, вие завършвате с това:
Видео компресия
Използваме нещо наречено "компресия между кадрите", което изчислява промените между всеки кадър и ги съхранява само. Така например, ако имате сравнително неподвижен изстрел, който отнема няколко секунди във видеоклип, много пространство се запазва, защото алгоритъмът за компресиране няма нужда да съхранява всички неща в сцената, която не се променя. Компресията между кадрите е основната причина, поради която имаме цифрова телевизия и уеб видео изобщо. Без него видеоклиповете ще бъдат стотици гигабайта, което е повече от средния размер на твърдия диск през 2005 г., когато YouTube стартира.
Също така, тъй като компресията между кадрите работи най-добре с по-голямата част от стационарното видео, затова confetti разваля качеството на видеото.
Забележка: GIF не прави това, поради което анимираните GIF често са много къси и малки, но все пак имат доста голям размер на файла.
Друго нещо, което трябва да имате предвид за видеоклипа, е скоростта му - количеството данни, което се разрешава във всяка секунда. Ако скоростта ви е 200 kb / s, вашият видеоклип ще изглежда доста зле. Качеството се увеличава с увеличаването на битрейт, но след няколко мегабайта в секунда се намалява възвръщаемостта.
Това е увеличена рамка, взета от видео на медуза. Едната вляво е на 3Mb / s, а тази отдясно е 100Mb / s.
30 пъти увеличение на размера на файла, но не и много повишаване на качеството. Обикновено видеоклиповете в YouTube се движат около 2-10Mb / s в зависимост от връзката ви, тъй като нищо повече не може да бъде забелязано.
Тази демонстрация работи по-добре с актуалния видеоклип, така че ако искате да го проверите сами, можете да изтеглите същите видеоклипове за тестови данни, използвани тук.
Аудио компресия
MP3 също използва скорост от 48 до 96 kbps (нисък клас) до 128 и 240 kbps (доста добра) до 320 kbps (аудио от висок клас) и най-вероятно ще чуете разликата само с изключително добри слушалки и ушите).
Съществуват и безжични кодеци за компресия за аудио, като основният е FLAC, който използва кодиране LZ77, за да достави изцяло без загуба звук. Някои хора се кълнат в отличното качество на звука на FLAC, но с разпространението на MP3, изглежда, че повечето хора или не могат да кажат, или нямат нищо против.