PNG画像の破壊に挑戦してみた
前回の記事を投稿したところ、記事を読んで下さった方からグリッチ画像というジャンルがあるということを教えていただきました。
簡単に言うと画像データの一部をわざと破壊することで、ノイズが入ってアートっぽくなって面白い!という感じ?
調べてみるとJPEGは結構グリッチ画像を作ってる人がいていろいろ出てきたのですが、PNGはあまり情報がない。PNGの場合、単純に画像データを壊しただけでは表示できなくなってしまうみたいです。
たぶんだけど、画像データとCRCとの整合がとれなくなってしまうからだろうなあ。おそらく一般的な画像ビューワではチャンクのCRCのチェックをして画像がバグってないか確認した上でPNGを表示するつくりになっていると思うので、単純に画像データをちょこっと弄るだけじゃだめなんだろうと思います。
なんでJPEGはOKなのか、みたいなのは別の機会に調べたいですねー。チェックサムみたいなのがないのでしょうか?
で、PNGのグリッチを探してみたらありました。しかも日本語情報で嬉しい。
PNGグリッチ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
この方は画像データそのものは変更せず、フィルターを変更することでバグらせてるらしいです。*1
これを参考に、というかまんま同じことをしようと思い、前回のPNG表示のコードを少し変えてPNGのグリッチ画像ジェネレータにしてみました。
ソースコードはこちら→ Glitch PNG Generator/Displayer · GitHub
例によって単純なPNGにしか対応していないので、うまく動かない場合もあります。
入力したPNG画像のグリッチを一定間隔で変化させながらファイルに吐きつつ表示します。
以下は実行中の様子。
実行中表示された画像は全部ファイルに吐き出してくれるので、実行後dataディレクトリはこんな感じになります。
パラメータを変更することで、どのフィルターがどの程度の割合と頻度で適用されるかを調整できます。
単一のフィルターのみを適用することも可能です。
Subフィルターのみ
Upフィルターのみ
Averageフィルターのみ
Paethフィルターのみ
Average と Paeth がキレイですねー。
まとめ
おまけ
@hoshi_sano ですね. そもそもバイナリを途中までデコードして壊してエンコードし直してpngで読み込ませるって時点でグリッチの概念に照らし合わせると美しくないですよね. とは言えアウトが綺麗だからやっちゃいましたけど…w
2013-08-22 20:57:52 via YoruFukurou to @hoshi_sano
出力画像の綺麗さは気にしてましたが、グリッチという概念としての美しさは気にしてませんでした...。
奥が深いっす...!