コンテンツにスキップ

Zlib

出典: フリー教科書『ウィキブックス(Wikibooks)』

zlib は、データ圧縮と展開のためのオープンソースのライブラリであり、特に 汎用性互換性 に優れています。zlib は、Deflate アルゴリズムをベースにしており、さまざまなアプリケーションで広く使用されています。

主な特徴

[編集]
  1. Deflate アルゴリズムの実装
    • zlib は、Deflate アルゴリズム(LZ77 圧縮と Huffman 符号化の組み合わせ)を実装しています。
    • gzipPNG などの形式で使用される圧縮アルゴリズムです。
  2. オープンソース
    • zlib は、zlibライセンス の下で提供されており、商用・非商用のどちらでも自由に使用できます。
  3. 軽量な設計
    • zlib は非常に軽量で、リソースの少ない環境でも適しています。
  4. クロスプラットフォーム
    • zlib は、UNIX、Windows、macOS、Linuxのディストリビューションなど、ほぼすべての主要なプラットフォームで動作します。
  5. エラー処理とストリームサポート
    • 圧縮や展開中のエラー処理が可能で、データストリーム(リアルタイムデータ)の処理をサポートしています。
  6. 広範な互換性
    • gzip や PNG など、広く使用されているフォーマットに直接対応しています。

主な利用用途

[編集]
  • ファイル圧縮と展開
    • gzip や zlib フォーマットのファイルを操作。
  • 画像フォーマット
    • PNG 画像の圧縮・展開に使用されるライブラリ。
  • ネットワーク通信
    • HTTP リクエスト/レスポンスの圧縮(Content-Encoding: gzip)で使用。
  • ゲームやデータベース
    • データの保存や転送時の効率化。
  • ライブラリやアプリケーション
    • 多くのソフトウェアで zlib は内部的に使用されています(例: PythonNode.jsMySQL など)。

zlib の主な関数

[編集]

zlib の主な関数は以下の通りです。

  1. 圧縮
    • compress()
      与えられたデータを zlib フォーマットで圧縮します。
    • compress2()
      圧縮レベルを指定してデータを圧縮します。
  2. 展開
    • uncompress()
      zlib 圧縮されたデータを展開します。
  3. ストリーム処理
    • inflate()
      圧縮データをストリーム形式で展開します。
    • deflate()
      ストリーム形式でデータを圧縮します。
  4. 圧縮バッファサイズの計算
    • compressBound()
      圧縮後の最大サイズを予測します。

使用例 (C言語)

[編集]

以下は zlib を使用してデータを圧縮・展開するシンプルな例です。

#include <stdio.h>
#include <string.h>
#include <zlib.h>

int main() {
    const char *input = "Hello, zlib! This is a test for compression and decompression.";
    size_t input_len = strlen(input);
    unsigned char compressed[100];
    unsigned char decompressed[100];
    uLong compressed_len = sizeof(compressed);
    uLong decompressed_len = sizeof(decompressed);

    // データの圧縮
    if (compress(compressed, &compressed_len, (const Bytef *)input, input_len) != Z_OK) {
        printf("Compression failed.\n");
        return 1;
    }
    printf("Compressed size: %lu bytes\n", compressed_len);

    // データの展開
    if (uncompress(decompressed, &decompressed_len, compressed, compressed_len) != Z_OK) {
        printf("Decompression failed.\n");
        return 1;
    }
    printf("Decompressed: %s\n", decompressed);

    return 0;
}

zlib のメリットと制限

[編集]

メリット

[編集]
  • 軽量で効率的。
  • 広範なプラットフォームで利用可能。
  • 他の多くのライブラリやアプリケーションでサポートされている。

制限

[編集]
  • 圧縮速度や圧縮率では、専用の高速ライブラリ(例: libdeflate, zstd)に劣る場合がある。
  • API がやや低レベルであるため、高度な操作には知識が必要。

インストール方法

[編集]
  • Linux
    sudo apt install zlib1g zlib1g-dev   # Debian系
    sudo yum install zlib zlib-devel     # Red Hat系
    
  • FreeBSD
    doas pkg install zlib
    
  • Windows
    • MinGW や MSYS2 環境でインストール可能。
  • ソースコードからビルド
    wget http://zlib.net/zlib-1.2.13.tar.gz
    tar -xvzf zlib-1.2.13.tar.gz
    cd zlib-1.2.13
    ./configure
    make
    sudo make install
    

zlib と他のライブラリとの比較

[編集]
ライブラリ 特徴 圧縮速度 圧縮率 主な用途
zlib 標準的で広く使われている 中程度 中程度 一般的な用途
libdeflate 高速かつ高圧縮 非常に高速 高い 高性能用途
zstd 次世代高速圧縮 高速 高い モダンな圧縮システム
bzip2 高い圧縮率だが速度は遅い 遅い 非常に高い ファイル圧縮 (例: tar)
gzip zlib を基にしたファイル形式 中程度 中程度 ファイル圧縮

結論

[編集]

zlib は、信頼性が高く、幅広い用途で使用されている圧縮ライブラリです。PNG 画像や gzip 圧縮など、日常的なソフトウェアでも頻繁に使われており、現在でもその重要性は高いです。他の高速ライブラリと比較してやや速度が劣る場合がありますが、汎用性と互換性において非常に優れています。