Jak kompresować pliki i dlaczego formaty ZIP oszczędzają ruch

10

Jeśli często pobierasz oprogramowanie lub przesyłasz duże dokumenty, prawdopodobnie natknąłeś się na pliki .zip. To jedno z tych cyfrowych udogodnień, które działa tak dobrze, że rzadko zastanawiamy się, jak to działa. Podstawowa idea jest prosta: weź duży plik, zmniejsz jego rozmiar i prześlij go szybciej przez Internet. Lub po prostu zaoszczędź miejsce na dysku twardym.

Ale jest tu mały paradoks. Jak usunąć niektóre dane, a następnie w magiczny sposób przywrócić je później, nie tracąc ani jednego bitu?

To nie magia. To jest zarządzanie redundancją. Po omówieniu podstaw jak kompresować plik, zagłębimy się w mechanikę tego, co faktycznie dzieje się w archiwum.

Kompresja plików: krótki przewodnik

Kompresja opiera się na algorytmach zmniejszających rozmiar pliku. Oszczędza to miejsce na dysku. Przyspiesza to również przesyłanie danych w przypadku wolnych kanałów komunikacyjnych. Tworzenie pliku zip jest wbudowane w większość nowoczesnych systemów operacyjnych. Podstawowe zadania nie wymagają specjalnych narzędzi.

Oto prosty proces.

1. Wybierz pliki docelowe

Zacznij od określenia, co chcesz skompresować. Kompresja daje najlepsze rezultaty w przypadku dużych plików. Pliki wideo i surowe obrazy są idealnymi kandydatami, ponieważ zajmują znaczną przepustowość i miejsce na dysku. Małe pliki tekstowe często są słabo kompresowane, ponieważ brakuje im powtarzających się wzorców potrzebnych do skutecznego zmniejszenia ich rozmiaru.

2. Skorzystaj z wbudowanych narzędzi

Prawdopodobnie masz już niezbędne oprogramowanie.

W systemie Windows proces jest niezwykle prosty. Kliknij prawym przyciskiem myszy wybrane pliki. Przejdź do menu „Wyślij do”. Wybierz folder skompresowany (zip). Resztę zrobi Windows.

Użytkownicy komputerów Mac mają podobny skrót. Kliknij pliki prawym przyciskiem myszy (lub przytrzymując klawisz Control i kliknij). Wybierz opcję Kompresuj. System automatycznie utworzy archiwum zip.

Jeśli Twój system operacyjny nie obsługuje tej funkcji lub potrzebujesz zaawansowanych możliwości, będziesz potrzebować oprogramowania innych firm. Narzędzia takie jak 7-Zip lub WinRAR oferują lepszą kontrolę nad poziomami kompresji. Jednak do codziennego użytku wystarczą wbudowane narzędzia.

3. Utwórz archiwum

Po uruchomieniu polecenia program rozpoczyna pracę. Skanuje pliki. Stosuje wybrany algorytm. Tworzy nowy plik ZIP w tym samym katalogu co oryginały.

Szybkość tego procesu zależy od dwóch czynników: rozmiaru pliku i mocy procesora. Kilka dużych plików wideo można skompresować w ciągu kilku sekund. Folder wypełniony małymi plikami tekstowymi może zająć więcej czasu ze względu na obciążenie, chociaż wynikające z tego zmniejszenie rozmiaru może nie być znaczące.

4. Praca z wynikiem

Teraz masz jeden pojemnik. Możesz zmienić jego nazwę. Możesz przenieść go na dysk flash. Możesz wysłać go e-mailem. Odbiorca musi pobrać treść, aby z niej skorzystać. To odwraca proces.

Bądź świadomy kompromisów. W przypadku dokumentów, kodu i tekstu kompresja jest praktycznie bezstratna. Otrzymujesz dokładnie tyle, ile włożyłeś. W przypadku zdjęć i filmów sytuacja jest inna. Niektóre metody kompresji pogarszają jakość w celu uzyskania mniejszego rozmiaru. Nazywa się to kompresją stratną. Kompresja tekstu jest zwykle bezstratna.

Jak faktycznie działa kompresja plików

Pliki komputerowe są notorycznie powtarzalne. Zawierają w kółko te same informacje. Programy kompresji rozwijają się dzięki tej nadmiarowości.

Zamiast pisać słowo „the” trzysta razy, algorytm kompresji zapisuje „the” raz. Następnie tworzy wskaźnik łącza. Za każdym razem, gdy napotyka „the”, odnosi się do pierwszej instancji. To radykalnie zmniejsza całkowitą liczbę bitów i bajtów.

Aby to zrozumieć, spójrzmy na język.

Weźmy pod uwagę przemówienie inauguracyjne Johna F. Kennedy’ego z 1961 roku. Słynne zdanie:

„Nie pytaj, co twój kraj może zrobić dla ciebie – zapytaj, co ty możesz zrobić dla swojego kraju”.

Policzmy jednostki. Cytat składa się z 17 słów. Zawiera 61 liter. Jest 16 miejsc. Jeden łącznik. Jeden punkt. Jeżeli do każdego znaku, spacji czy znaku interpunkcyjnego przypiszemy po jednej jednostce pamięci, to całkowity rozmiar pliku wyniesie 79 jednostek.

Teraz znajdźmy nadmiarowość. Dla uproszczenia ignorujemy wielkość liter.

  • „zapytaj” pojawia się dwukrotnie.
  • „co” pojawia się dwukrotnie.
  • „Twój” pojawia się dwukrotnie.
  • „kraj” pojawia się dwukrotnie.
  • „can” pojawia się dwukrotnie.
  • „do” pojawia się dwukrotnie.
  • „for” pojawia się dwukrotnie.
  • „ty” pojawia się dwukrotnie.

Mniej więcej połowa wyrażenia jest zbędna. Dziewięć unikalnych słów – pytaj, nie, co twój kraj może zrobić dla ciebie – zawiera prawie wszystkie niezbędne informacje. Aby zrekonstruować drugą połowę, algorytm po prostu odwołuje się do słów z pierwszej połowy. Wypełnia spacje i znaki interpunkcyjne przy użyciu prostych zasad.

Na tym polega istota kompresji bezstratnej. Nie usuwa informacji. Usuwa powtórzenia.

Następnie przyjrzymy się bliżej algorytmom szukającym tych wzorców.

Ukryty koszt kompresji słownika

Większość narzędzi do kompresji wykorzystuje odmiany algorytmu słownika adaptacyjnego LZ. Został nazwany na cześć twórców Lempela i Ziva, a część „słownikowa” jest mechanizmem katalogowania powtarzających się danych. System organizacji tych zapisów nie jest skomplikowany. Może to być prosta lista numerowana.

Weźmy słynne zdanie Kennedy’ego. Program kompresujący skanuje tekst pod kątem duplikatów słów i przypisuje im indeksy. Następnie zastępuje słowa przypisanymi im numerami.

Jeśli słownik wygląda tak:

  • zapytaj
  • co
  • twój
  • kraj
  • może
  • za
  • ty

Wyrażenie „Nie pytaj, co twój kraj może zrobić dla ciebie; zapytaj, co ty możesz zrobić dla swojego kraju” jest konwertowane na kod. Ona staje się:

1 nie 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4

Komputer odbierający używa tego samego słownika i wzoru liczbowego do rekonstrukcji oryginalnego tekstu. Dokładnie tak działa unboxing. Niektóre skompresowane pliki zawierają wbudowany dekompresor. Automatycznie przywraca oryginalny plik po pobraniu.

Ale ile miejsca faktycznie to oszczędza?

Ciąg liczbowy jest krótszy niż pełny cytat. Ale jest niuans. Musisz przechowywać sam słownik wraz ze skompresowanymi danymi.

W prawdziwym świecie obliczanie wymagań dotyczących plików jest kłopotliwe. Na potrzeby tej analizy załóżmy, że każdy znak i spacja równają się jednej jednostce pamięci. Całe wyrażenie zajmuje 79 jednostek. Skompresowane zdanie zawiera 37 jednostek. Słownik również zajmuje 37 jednostek.

Całkowity rozmiar pliku wynosi 74 jednostki. Redukcja jest minimalna.

To tylko jedno zdanie. Gdyby algorytm przetworzył pozostałą część wypowiedzi, stwierdziłby, że te słowa powtarzają się znacznie częściej. Wydajność wzrasta wraz ze wzrostem liczby powtórzeń. Jak zobaczymy, system przepisuje również własne słownictwo, aby jeszcze bardziej zoptymalizować organizację.

Poza zwykłym zbiegiem okoliczności

Poprzednie kroki polegały na znalezieniu pełnych, powtarzających się słów. Rozważaliśmy tekst jako ciąg odrębnych jednostek. Algorytm kompresji nie dba o słowa. Wzory są ważne.

Cel jest prosty: zmniejszyć rozmiar pliku.

W tym celu oprogramowanie szuka nadmiarowości. Nie pyta: „Czy to jest słowo?” Pyta: „Czy widziałem już tę sekwencję?” I to jest bezlitosne. Jeśli wzór występuje tylko raz, jest usuwany. Jeśli krótszy wzór występuje częściej niż dłuższy, wówczas dłuższy może zostać rozbity na kawałki.

Jest to „adaptacyjny” rdzeń algorytmów opartych na LZ. Słownik ewoluuje. On się zmienia. Optymalizuje w czasie rzeczywistym.

Jak działa wybór wzoru

Weźmy słynne zdanie Johna Kennedy’ego.

  • „Nie pytaj, co twój kraj może zrobić dla ciebie, nie pytaj, co ty możesz zrobić dla swojego kraju.”*

Osoba widzi słowa. Sprężarka widzi symbole.

Pierwsza powtarzająca się sekwencja może być czymś drobnym. „t”, po którym następuje spacja. Występuje w słowach „nie” i „co”. Program to rejestruje. Zapisuje. Potem idzie dalej.

Dlaczego? Ponieważ w tym krótkim fragmencie „t” nie jest powtarzane na tyle często, aby uzasadniać koszt przechowywania własnego identyfikatora w słowniku. Jest nadpisywany lub ignorowany.

Następnie w słowach „twój” i „kraj” pojawia się „ou”. Zdrowy? Może. W pełnej książce „ty” to kopalnia złota. Tutaj? Algorytm znajduje coś lepszego.

„Twój” i „kraj” pojawiają się razem jako „twój kraj”. Powtórzone dwa razy. To silniejszy sygnał niż „ou”. Wpis słownikowy dotyczący „ou” został odrzucony. „twój kraj” zajmuje jego miejsce.

Ale poczekaj.

Spójrz na „można zrobić”. Po nim następuje „twój” i „ty”. Powtarza się sekwencja „mogę zrobić dla ciebie”.

Co jest bardziej skuteczne?
„Twój kraj” = 13 znaków (łącznie ze spacją).
„mogę dla Ciebie zrobić” = 15 znaków.

Algorytm preferuje dłuższe dopasowanie, jeśli oszczędza więcej bitów w każdym wystąpieniu. Ale „mogę zrobić dla ciebie” obejmuje „ty”, podczas gdy „twój kraj” obejmuje „twój”.

Jeśli program priorytetowo traktuje maksymalną wymianę znaków, może rozbić „twój kraj” na kawałki. Pozostawia „r kraj” jako przyrostek i tworzy podstawowy wpis „mogę dla ciebie zrobić”. Pozwala to kompresorowi na odniesienie się do głównej części frazy za pomocą pojedynczego kodu, podczas gdy niewielkie różnice („twój” i „ty”) są przetwarzane przy użyciu odniesień wtórnych.

To dynamiczne przepisywanie sprawia, że ​​LZ jest adaptacyjny. Słownik nie jest statyczny. To żywy zapis tego, co się właśnie wydarzyło w strumieniu danych.

Współczynnik kompresji

Korzystanie z naszych wzorców pochodnych:

  • zapytaj__
    -co__
  • ty
  • r__kraj
  • cando__dla__ty

Oryginalne zdanie staje się serią wskazówek:

1 not__ 2 3 4 5 __ — __ 1 2 3 5 4

Zużycie pamięci zmienia się radykalnie.

Tekst źródłowy: 79 jednostek.
Skompresowane dane: 18 jednostek.
Narzut słownika: 41 jednostek.
Razem: 59 jednostek.

Zaoszczędziliśmy 20 jednostek. Jest to redukcja o około 25%. Dużo jak na kilka linijek mowy. I niekoniecznie jest to najbardziej efektywny możliwy wynik. Prawdopodobnie można by znaleźć bardziej zwarty układ. Ale chodzi o to, że znalezienie właściwych wzorców jest ważniejsze niż znalezienie jakichkolwiek wzorców.

Dlaczego tekst kompresuje się lepiej niż grafika

Dlaczego więc niektóre pliki kurczą się o 50% lub więcej, podczas gdy inne prawie się nie zmieniają?

Nadmierność.

Języki naturalne są wysoce zbędne. Litery są pogrupowane w określony sposób. „Th”, „ing”, „tion”. Słowa powtarzają się nieustannie. Pliki tekstowe są gęste i zawierają przewidywalne struktury. Kompresory świetnie się tutaj sprawdzają.

Kod programu jest podobny. Ograniczony zestaw słów kluczowych i poleceń jest powtarzany w nieskończoność. „jeśli”, „podczas”, „powrót”. Wzory są trudne. Kompresja działa dobrze.

Grafika? Audio?

Nie bardzo.

Obraz lub plik MP3 zawiera unikalne dane. Każdy piksel ma określoną wartość. Każda próbka audio jest wyjątkowa. Istnieje kilka powtarzających się sekwencji. Entropia jest wysoka. Algorytm nie może znaleźć wystarczającej liczby nakładających się wzorców, aby utworzyć użyteczny słownik.

Z tego powodu kompresja bezstratna nie działa w przypadku plików multimedialnych. Potrzebne są inne techniki. Więcej na ten temat później.

Rozmiar pliku i wybór algorytmu

Czy kompresja poprawia się wraz ze wzrostem rozmiaru pliku?

Ogólnie rzecz biorąc, tak.

Gdybyśmy skondensowali całe przemówienie Kennedy’ego, oszczędności byłyby większe. Dlaczego? Ponieważ te same schematy powtarzają się częściej. Wpisy słownikowe są wykorzystywane tysiące razy. Narzut słownika staje się znikomy w porównaniu z oszczędnościami.

Małe pliki? Koszty słownikowe pochłaniają zyski.

Ogromną rolę odgrywa także wybór algorytmu.

Nie wszystkie opcje LZ są sobie równe. Niektóre są skonfigurowane do obsługi tekstu. Niektóre służą do danych. Niektórzy używają słowników hierarchicznych — słowników w słownikach — do identyfikowania złożonych, zagnieżdżonych wzorców w dużych plikach. Mogą się zacinać przy małych wejściach.

Programiści stale ulepszają te systemy. Cel jest zawsze ten sam: lepszy stopień kompresji, większa prędkość. Ale nie ma uniwersalnego rozwiązania.

Najlepszy kompresor dla Twojego tekstu może być najgorszy dla Twojej bazy danych.

Mówimy o kompresji bezstratnej. Tylko w ten sposób możesz zagwarantować odzyskanie oryginalnego pliku. Każdy szczegół pozostaje nienaruszony. Dzielisz plik na mniejsze części w celu przechowywania lub transmisji, a następnie składasz go z powrotem dokładnie tak, jak był. Żadne dane nie zostaną utracone.

Kompresja stratna działa w drugą stronę. Nie próbuje ratować wszystkiego. Zamiast tego odrzuca „niepotrzebne” informacje. Cel jest prosty: zmniejszyć rozmiar pliku. Znajdziesz go wszędzie. Jest to standard dla obrazów rastrowych.

Bitmapy są rozdęte. Zajmują dużo miejsca. Zeskanowana fotografia jest tego doskonałym przykładem.

Algorytmy kompresji bezstratnej zawodzą tutaj. Tak, duże obszary wyglądają identycznie. Niebo jest niebieskie. Ale jeśli przyjrzysz się uważnie, każdy piksel jest nieco inny. Wartości kolorów zmieniają się. Aby zmniejszyć rozmiar pliku bez utraty rozdzielczości, należy zmienić te wartości.

Program wybiera jeden odcień niebieskiego. Przypisuje tę pojedynczą wartość każdemu pikselowi na niebie. Przepisuje plik tak, aby wskazywał ten link. Wynik? Rozmiar pliku jest znacznie zmniejszony. Nie zauważysz różnicy.

Ale jest pewien haczyk. Nigdy nie będzie można odzyskać oryginalnego pliku.

Po skompresowaniu pozostaje interpretacja rzeczywistości zaproponowana przez program kompresujący. Oryginalne dane znikają. Nie można używać kompresji stratnej w przypadku rzeczy wymagających precyzyjnej reprodukcji. Aplikacje programowe? Nie. Bazy danych? Nie. Przemówienia inauguracyjne prezydenta? Absolutnie nie.

„W przypadku kompresji stratnej nie można odzyskać oryginalnego pliku po jego skompresowaniu. Pozostaje program kompresujący, który reinterpretuje oryginał”.

Zaktualizowaliśmy ten artykuł przy użyciu technologii AI, a następnie upewniliśmy się, że został sprawdzony i zredagowany przez redaktora HowStuffWorks.

Często zadawane pytania dotyczące kompresji plików

Do czego służy kompresja plików?
Zmniejsza rozmiar pliku. Mniejsze pliki oznaczają szybsze przesyłanie. Szybciej wysyłasz i odbierasz dane.

Jakie są główne typy schematów kompresji plików?
Jest ich dwóch. Kompresja bezstratna i stratna. Kompresja bezstratna dzieli plik i rekonstruuje go później. Kompresja stratna usuwa bity. Trwale zmniejsza rozmiar pliku. Nie można odwrócić kompresji stratnej.

Jakiej kompresji używają pliki zip?
Pliki zip opierają się na bezstratnej kompresji danych. Obsługują wiele katalogów. Używają algorytmów takich jak DEFLATE. Dane wychodzą dokładnie takie same, jak przyszły.

Czy kompresowanie plików obniża jakość?
Tak. Po skompresowaniu obrazu na komputerze lub w aparacie jakość często ulega pogorszeniu. Ostrość spada. Kontrast znika. Drobne szczegóły kolorów znikają. Obraz wygląda gorzej. To kompromis.