― Indexed PNG を使った “zip-to-image” の物語 ―
ある日、ふと思いました。
「ZIP をそのまま PNG に閉じ込められたら、なんかロマンじゃない?」
画像の中に、ZIP が丸ごと眠っている。
それをまた引き出せる。
しかも 完全可逆で、容量はほぼ増えない。
そんな無謀とも言える妄想を、そのまま実装して Web で公開しました。
🔗 デモサイト(公開中)
ZIP ⇄ PNG(可逆・容量ほぼ増加なし)コンバータ:
https://uni928.github.io/TestYou/index33.html
🌱 発想:
ZIP を PNG に閉じ込める…と言っても、
画像の RGB に無理やりエンコードするのではありません。
実際の PNG の仕様を理解してみると、もっと綺麗な方法がありました。
🎨 Indexed PNG という器
PNG には パレット(索引カラー)形式があります。
1ピクセル = インデックス番号(1バイト) だけ。
RGB ではなく、番号を置くだけ。
この番号さえ壊れなければ、どんなバイナリデータでも 1byte=1pixel として安全に保存できる。
PNG の中身は Deflate(可逆圧縮)なので、
ZIP データをそのまま埋め込んでも、
ZIP の内容は一切変わりません。
🧪 実験:ZIP → PNG → ZIP の完全一致
実験してみると…
- 172KB の ZIP → 172KB の ZIP(完全一致)
- 68MB の ZIP → 68MB の ZIP(完全一致)
しかも、PNG のファイルサイズは
ZIP + 数 KB 程度しか増えません。
つまり、
PNG = ZIP を包んだだけの透明な器
という状態を実現できました。
🧩 なぜ容量が増えないの?
- PNG(Indexed)は Deflate 圧縮
- ZIP も Deflate 圧縮
つまり ZIP の圧縮済みバイト列を
PNG の「圧縮データ領域(IDAT)」に
ほぼそのまま流し込むだけ なのです。
結果、ほとんど容量が増加しません。
⚠️ Windows の “警告” だけは逃れられない
実は、ZIP のバイナリは完全一致なのですが…
Windows のセキュリティ機能だけは復元ZIPに警告を出す事があります。
ZIP をダウンロードすると、「Zone.Identifier」という
「インターネットから来たファイルですよ」という印が付くためです。
これは ZIP の中身とは関係ありません。
ファイルシステム側のメタ情報の問題です。
対処は簡単:
ZIP を右クリック → プロパティ → 「ブロック解除」 / 「許可する」
これで正常に解凍できます。
🧨 注意:bat ファイルなどは警告が強く出るかも
Windows は .bat など実行ファイル系に対して
特に厳しい警告を出すことがあります。
ZIP が壊れているわけではなく、
Windows が「これは危険かもしれん」と言ってるだけです。
7-Zip や WinRAR なら普通に展開できます。
🌈 おわりに(ポエム)
PNG は、ただの画像形式ではありません。
その中に、ZIP を寝かせることができる。
ただの 2D の絵ではなく、バイナリを運ぶ器にもなれる。
技術的にはとてもシンプルなのに、
どこか詩的で、デジタルアートのような美しさがある。
見た目は画像。
中身は ZIP。
そんな二重構造のデータを、
クロスオーバーのように行き来させると
私たちが普段「フォーマット」だと思っているものの境界線が
ふわりと溶けていく気がします。
「画像」が「圧縮データ」になり、
「圧縮データ」が「画像」になり、
その境界を軽やかに飛び越えていく瞬間。
そんな小さな魔法を、ぜひ触ってみてください。
🔗 https://uni928.github.io/TestYou/index33.html
🙏 Special Thanks
いろいろな人のアイデアやテストの積み重ねで
ここまで完成度の高い “zip-to-image” ができました。
技術は時に魔法。
魔法は時に、こんな静かな形で現れるのかもしれません。