画像のほとんどが同一で一部だけが異なる画像の集合(ゲームの画像素材を想定しています)を,総ファイルサイズが最も小さくなるように差分をとって圧縮します. 背景や技術的な解説は 七色雑記 | ゲームの画像素材の効率的な差分圧縮 で書いています.
最新版のバイナリは GitHub のページ (https://github.com/idzuna/stia) から入手できます.
- 圧縮したい画像ファイル(PNG 形式の未対応)をまとめて compress.bat へドラッグします
- 差分画像の重ね合わせを何重まで許容するかを指定します(0 指定で無制限,1 指定で重ね合わせなし,つまりなにもせず PNG で圧縮し直すだけになります.3 が計算量と圧縮率のバランスが良くおすすめです)
- しばらく待つと output ディレクトリ以下に画像 (.png) とメタデータ (.stia) が出力されます
圧縮によって出力されるメタデータ (.stia) は,以下の内容を改行で区切ったテキストファイルです.
- 画像ファイル名
- (その画像が別の画像からの差分である場合のみ)参照先の画像の情報が記載されたメタデータ (.stia) のファイル名
- (その画像が別の画像からの差分である場合のみ)差分画像を重ねる x 座標(画像左端からのピクセル数)
- (その画像が別の画像からの差分である場合のみ)差分画像を重ねる y 座標(画像上端からのピクセル数)
圧縮により出力されたメタデータ (.stia) は reconstruct.exe へドラッグすると,元の画像を復元できます(reconstructed というディレクトリが生成され,その下に画像が出力されます)
Visual Studio 2019 でのビルドを確認しています.OS やコンパイラ依存のコードは使用していないため,C++17 に対応した他の環境でもビルド可能と思われます.Visual Studio 2019 を使ったビルド方法を以下に示します.
- GitHub のページ (https://github.com/idzuna/stia) から最新版のソースコードをダウンロード・展開します
- zlib, libpng のソースコードを入手し,すべての *.c ファイルおよび *.h ファイルを stir/libpng/ へコピーします
- stia.sln を Visual Studio で開いてビルドします.x64 Release ビルドでのみ動作確認しています
MIT ライセンスで配布します.詳細は LICENSE をご覧ください.ソースコードは GitHub のページ (https://github.com/idzuna/stia) から入手できます. リリースバイナリには他プロジェクトのコードが含まれています.詳細は LICENSE-* をご覧ください.