Skip to content

Warum unterscheidet sich die ZIP-Komprimierungsrate je nach Datei so sehr

Kategorie:Dateiformat
Dieser Artikel ist derzeit nur auf Japanisch verfügbar. Übersetzte Versionen werden schrittweise veröffentlicht.

Haben Sie schon erlebt, dass 「die Datei mit ZIP kaum kleiner wurde」 oder 「die Textdatei nach der Komprimierung dramatisch kleiner wurde」? Die Komprimierungsrate von ZIP variiert je nach Dateityp erheblich. Dieser Artikel erläutert die Gründe und Eigenschaften der einzelnen Dateiformate.

Dateityp und Größe nach Kompression (im Vergleich zu 100% Original) 0% 100% TXT / CSV ~15% JSON / XML ~20% HTML / CSS / JS ~25% DOCX / XLSX ~90% PDF ~95% JPEG / PNG / MP3 ~99% MP4 / ZIP ~100%
Abbildung: Vergleich der ZIP-Kompressionsrate nach Dateityp (je kleiner, desto effektiver)

In ZIP verwendeter Komprimierungsalgorithmus: Deflate

Das ZIP-Format (.zip) verwendet hauptsächlich den Algorithmus <strong>Deflate</strong>. Deflate ist eine Kombination der folgenden 2 Technologien.

  • <strong>LZ77(Lempel-Ziv 1977)</strong>: Ersetzt wiederholte Muster in Daten durch 「Verweise auf Positionen, an denen sie zuvor aufgetreten sind」
  • <strong>Huffman-Codierung</strong>: Zeichen mit hoher Auftrittsfrequenz werden als kurze Bitfolgen dargestellt

<strong>Je mehr wiederholte Muster Daten enthalten, desto höher ist die Kompressionsrate</strong>, während zufällige oder bereits komprimierte Daten kaum komprimiert werden können.

Kompressionsrate nach Dateiformat

DateiformatKomprimierungsrate (Richtlinie)Grund
Text (.txt)60〜80% ReduzierungViele wiederholte Zeichen und Wörter
CSV70〜85% ReduzierungTrennzeichen und identisches Muster wiederholen sich
HTML / XML / JSON65〜85% ReduzierungViele Wiederholungen von Tag- und Schlüsselnamen
Protokolldatei70〜90% ReduzierungViele Wiederholungen von Timestamp-Format
BMP (unkomprimiertes Bild)Reduktion um 50–80 %Viele Sequenzen von Pixeln der gleichen Farbe
PDFReduktion um 5–20 %In den meisten Fällen ist es intern mit zlib vorkomprimiert
PNGReduzierung um 0–5%Bereits mit Deflate komprimiert
JPEGReduzierung um 0–5%Bereits mit DCT + Huffman komprimiert
MP3 / AAC0–3% ReduktionBereits mit verlustbehafteter Kompression komprimiert
MP4 / H.2640–3% ReduktionBereits stark komprimiert
ZIP / GZ / 7z0–2% Reduktion (Größe kann in einigen Fällen zunehmen)Neukomprimierung bereits komprimierter Daten ist praktisch unwirksam

Wenn komprimierte Dateien noch größer werden

Beim Komprimieren bereits komprimierter Dateien wie JPEG und MP4 mit ZIP kann die Größe <strong>leicht zunehmen</strong> um den ZIP-Header (Datei-Metadaten). Dies liegt daran, dass das ZIP-Format für jede Datei einen lokalen Datei-Header (mindestens 30 Bytes) und ein zentrales Verzeichnis für die gesamte ZIP-Datei hat.

JPEGファイル (1.00 MB)
 └── ZIP圧縮後: 1.00 MB + ヘッダー(約50B)= わずかに増加

Unterschied zwischen der Verwendung des 「Store」-Modus

ZIP verfügt über einen <strong>Store</strong>-Modus, der Dateien ohne Komprimierung speichert. Wenn Sie mehrere bereits komprimierte Dateien (wie JPEG, MP4 usw.) zusammenfassen, können Sie mit dem Store-Modus die CPU-Last der Komprimierungsverarbeitung eliminieren und gleichzeitig eine vergleichbare Größe beibehalten.

# zip コマンドで圧縮レベルを指定
zip -0 archive.zip image.jpg video.mp4   # Store(圧縮なし)
zip -9 archive.zip data.csv report.txt   # 最大圧縮

# Python で圧縮レベルを指定
import zipfile
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zf:
    zf.write('data.csv')

Merkmale der ZIP-Testdatei

Die Test-ZIP-Dateien von DevLab speichern <strong>Zufallsdaten (Pseudo-Zufallsbytefolgen)</strong>, um die Dateigröße präzise zu steuern. Da Zufallsdaten maximale Entropie haben, werden sie durch Deflate kaum komprimiert. Daher gilt: 「10-MB-ZIP-Datei」 = 「etwa 10 MB auch nach dem Entpacken」.

Wenn Sie eine ZIP-Datei benötigen, die nach dem Entpacken eine bestimmte Größe hat, können Sie eine Testdatei mit der folgenden Methode erstellen.

# 解凍後ちょうど 100MB になるZIPを作成(ゼロバイト埋め、高圧縮)
dd if=/dev/zero bs=1M count=100 | zip -9 zero-100mb.zip -

# 解凍後ちょうど 100MB になるZIPを作成(ランダムデータ、ほぼ無圧縮)
dd if=/dev/urandom bs=1M count=100 | zip -0 random-100mb.zip -

Zusammenfassung

  • Die ZIP-Komprimierungsrate wird durch die Menge der <strong>wiederholten Datenmuster</strong> bestimmt
  • Text, CSV und XML können um <strong>60–85 %</strong> reduziert werden
  • JPEG, MP4 und bereits komprimierte Dateien können <strong>kaum komprimiert werden</strong> (tatsächlich nehmen sie leicht zu)
  • Beim Zusammenfassen bereits komprimierter Dateien CPU sparen mit <strong>Store-Modus (-0)</strong>
  • Die Test-ZIPs von DevLab verwenden Zufallsdaten, daher haben sie vor und nach dem Entpacken ungefähr die gleiche Größe

→ <a href="/ja/files/zip/">ZIP-Testdateien hier herunterladen</a>

Testdatei zur Verwendung in diesem Artikel

  • → <a href="/ja/files/zip/" class="text-primary-600 dark:text-primary-400 hover:underline">ZIP-Testdatei-Liste</a>
  • → <a href="/ja/files/csv/" class="text-primary-600 dark:text-primary-400 hover:underline">Liste der CSV-Testdateien</a>

Verwandte Artikel

  • → <a href="/ja/blog/file-format-quick-reference/" class="text-primary-600 dark:text-primary-400 hover:underline">Schnellreferenz Dateiformate für Entwickler</a>
  • → <a href="/ja/blog/file-validation-checklist/" class="text-primary-600 dark:text-primary-400 hover:underline">Checkliste zur Implementierung der Dateiverifizierung für Web-Formulare</a>