KomPRESja danych
Jak zmieścić więcej w mniejszym pliku? Zobacz, jak działają ZIP, PNG, JPG i MP3: jedne metody niczego nie gubią, a inne celowo wyrzucają to, czego i tak nie zauważysz.
1. Powtórki: RLE
bezstratnaZamiast pisać „biały, biały, biały, biały, biały”, piszemy „5 × biały”. Tak działa RLE (ang. run-length encoding, kodowanie długości serii). Narysuj coś i zobacz, kiedy to się opłaca, a kiedy wręcz szkodzi.
Bez kompresji: 1 bajt na piksel, czyli 256 bajtów. W RLE każda seria to 2 bajty: ile razy i jaki kolor.
2. Krótkie kody dla częstych liter: Huffman
bezstratnaNormalnie każda litera zajmuje 8 bitów. Ale „A” występuje dużo częściej niż „Ż”, więc czemu nie dać jej krótszego kodu? To ten sam pomysł co w alfabecie Morse'a. David Huffman w 1952 roku wymyślił, jak zbudować najlepsze takie kody: za pomocą drzewa.
3. Wyrzuć to, czego nie widać: JPG
stratnaJPG dzieli zdjęcie na kwadraty 8 × 8 pikseli i w każdym zapisuje głównie ogólny kształt jasności, a drobne szczegóły zaokrągla albo wyrzuca. To prawdziwy algorytm JPG (transformata DCT i kwantyzacja), uproszczony do jednego kroku. Zmniejsz jakość i zobacz, co się dzieje.
Co się lepiej skompresuje?
Punkty 0 · Seria 0 · Rekord 0Co to jest kompresja danych?
Kompresja bezstratna
Kompresja to zapisywanie danych tak, żeby zajmowały mniej miejsca. Kompresja bezstratna pozwala odtworzyć plik co do bitu. Tak działają archiwa ZIP, obrazki PNG i dźwięk FLAC. Wykorzystuje powtórzenia i to, że niektóre znaki występują częściej niż inne.
Kodowanie RLE
Najprostsza metoda: serię takich samych elementów zapisuje się jako „ile razy” i „co”. Napis AAAAAABBB staje się 6A3B. RLE świetnie działa dla prostych grafik z dużymi jednolitymi plamami, ale przy zdjęciach i szumie potrafi powiększyć plik.
Kodowanie Huffmana
Częste znaki dostają krótkie kody, a rzadkie długie. Kody odczytuje się z drzewa, które buduje się, łącząc za każdym razem dwa najrzadsze elementy. Żaden kod nie jest początkiem innego, więc nie potrzeba przerw między znakami, inaczej niż w alfabecie Morse'a. Kodowanie Huffmana jest częścią formatów ZIP, PNG, JPG i MP3.
Kompresja stratna
Kompresja stratna celowo wyrzuca część informacji, której człowiek nie zauważy. Pliku nie da się już odtworzyć idealnie, ale bywa nawet dziesięć razy mniejszy. Tak działają JPG (zdjęcia), MP3 i AAC (muzyka) oraz MP4 (filmy).
Jak działa JPG?
Zdjęcie dzieli się na bloki 8 × 8 pikseli. Każdy blok zamienia się na zestaw „wzorów” od gładkich do bardzo drobnych (transformata DCT). Drobne wzory oko słabo widzi, więc zaokrągla się je mocno albo do zera. Przy niskiej jakości widać wtedy charakterystyczne „kafelki”.
Czy da się skompresować plik ZIP drugi raz?
Prawie wcale. Dobrze skompresowane dane nie mają już powtórzeń ani przewidywalnych wzorów, więc kolejna kompresja nie ma czego skrócić. Z tego samego powodu ZIP z plikami JPG albo MP3 jest niewiele mniejszy od samych plików.
Popularne formaty i rodzaj kompresji
| Format | Rodzaj | Do czego | Jak mniej więcej działa |
|---|---|---|---|
| ZIP, 7z | bezstratna | dowolne pliki, archiwa | szukanie powtórzeń + kodowanie Huffmana |
| PNG | bezstratna | grafiki, zrzuty ekranu, logo | przewidywanie pikseli + powtórzenia + Huffman |
| GIF | bezstratna (do 256 kolorów) | proste animacje | słownik powtarzających się ciągów (LZW) |
| JPG | stratna | zdjęcia | bloki 8 × 8, DCT, kwantyzacja, Huffman |
| MP3, AAC | stratna | muzyka | usuwanie dźwięków, których ucho nie słyszy |
| MP4 (H.264) | stratna | filmy | zapisywanie tylko zmian między klatkami |
| FLAC | bezstratna | muzyka w wysokiej jakości | przewidywanie kolejnych próbek dźwięku |
Najczęstsze pytania o kompresję
Co to jest kompresja danych?
Kompresja to zapisanie danych w sposób, który zajmuje mniej miejsca niż oryginał. Dzięki niej pliki szybciej się przesyła i mniej zajmują na dysku. Przed użyciem skompresowane dane trzeba rozpakować, czyli zdekompresować.
Czym różni się kompresja stratna od bezstratnej?
Kompresja bezstratna pozwala odtworzyć dane dokładnie co do bitu (ZIP, PNG, FLAC). Kompresja stratna wyrzuca część informacji, której człowiek nie zauważy, więc plik jest mniejszy, ale nie identyczny z oryginałem (JPG, MP3, MP4).
Na czym polega kodowanie RLE?
RLE zastępuje serię powtarzających się elementów jednym zapisem: liczbą powtórzeń i elementem. Na przykład AAAAABB zapisuje się jako 5A2B. Metoda jest skuteczna, gdy w danych jest dużo długich serii.
Na czym polega kodowanie Huffmana?
Każdy znak dostaje kod zero-jedynkowy, którego długość zależy od tego, jak często znak występuje: częste znaki mają krótkie kody, a rzadkie długie. Kody odczytuje się z drzewa budowanego przez wielokrotne łączenie dwóch najrzadszych elementów.
Dlaczego zdjęcia JPG mają czasem „kwadraty”?
JPG kompresuje zdjęcie w blokach 8 × 8 pikseli. Przy niskiej jakości każdy blok jest mocno uproszczony niezależnie od sąsiadów, więc na granicach bloków widać skoki jasności, czyli charakterystyczne kafelki.
Czy można skompresować każdy plik?
Nie. Dane losowe albo już skompresowane nie mają powtórzeń, które dałoby się skrócić. Matematycznie nie istnieje metoda bezstratna, która zmniejsza każdy możliwy plik: jeśli jedne pliki się skracają, to inne muszą się wydłużyć.
Kiedy używać PNG, a kiedy JPG?
PNG nadaje się do grafik z ostrymi krawędziami, tekstem i jednolitymi kolorami, np. zrzutów ekranu i logo. JPG jest lepszy do zdjęć, w których jest mnóstwo płynnych przejść i drobnych szczegółów.