Processingでグリッチ画像を生成してみました。

glitch_20_00_save

元の画像は、熊本県八代市で撮影した工場の写真です。

test

コードは以下のとおりです。
こちらのページを参考にしました:
hysysk: today's glitch 3

PImage glitch;

byte[] b;

byte byte_check = 20;
byte byte_count = 0;

void setup() {
b = loadBytes("test.jpg");

for (int i = 0; i < b.length;i++) {
if (b[i] == byte_check) {
b[i] = byte_count;
}
}

saveBytes("glitch_" + byte_check + "_" + nf(byte_count, 2) + ".jpg", b);

glitch = loadImage("glitch_" + byte_check + "_" + nf(byte_count, 2) + ".jpg");

size(glitch.width, glitch.height);
image(glitch, 0, 0);
save("glitch_" + byte_check + "_" + nf(byte_count, 2) + "_save.jpg");
}


byte_checkとbyte_countの値を変えて、様々なグリッチ画像を生成して遊べます。


save関数を利用して、わざわざ画面のキャプチャ画像まで生成しているのは、
値によっては、生成されたグリッチ画像がProcessingでの表示と異なる場合があったためです。
ただし、byte_checkの値を10、20、30、40とし、
byte_countを0から40まで変化させて画像を生成したのですが、
その中でも、結果が異なるものはbyte_check = 20の時のbyte_count = 8から18のみでした。
なお、byte_check = 10の時は、byte_countは0から15のみ生成でき、
それより後はエラーが出て生成できませんでした。
また、byte_check = 20、byte_count = 8から18で結果が変わるのはこの工場の画像のみであり、
他の画像では同様の現象は確認されませんでした。

例として、byte_check = 20、byte_count = 8 の画像をあげます。
まずは、save関数で保存したもの。
glitch_20_08_save

そして、実際に生成された画像はこちら。
glitch_20_08
ブログにアップロードするとsave関数で保存したものと同じになってしまったため、
Paint Screenで保存しなおしたものを貼りました。
また、Dropboxに画像をアップロードしたところ、
Web上からこの画像にアクセスすると、やはりsave関数で保存したものと同じになりました。
不思議です。

また、生成画像とsave画像はまったく同じものであるはずなのに、
エクスプローラ上のサムネイルでは異なるものも確認できました。
ファイル名はgilitch_[byte_check]_[byte_count].jpgとなっています。
また、末尾に「_save」がついている方がsave関数で作成した画像です。
glitch


また、数値によっては原形が一部とどまっているものもありました。
下の画像はbyte_check = 40、byte_count = 28のものです。
工場のパイプ等が確認できます。
glitch_40_28_save

原形のとどまり方は、元の画像によっても異なるのではないか、と推測しています。
上にあげた工場の写真はどんな値でもぐちゃぐちゃな画像が生成されたのですが、
レナさんの画像は、わりと原形をとどめている画像が多かったです。
また、レナさんの画像は、どれも右端から線をひくように壊れており、
数値を変えるごとに線の色や量が変わる、といった特徴をもっていました。
lena
byte_check = 40 , byte_count = 0
glitch_40_00_save
byte_check = 10 , byte_count = 2
glitch_10_02_save



最後に、上の工場のグリッチ画像については、こちらで閲覧できるようにしました。
説明したとおり、save関数を利用しているので、
同じ画像が2枚ずつ並んでいると思います。
byte_check = 10のグリッチ画像
byte_check = 20のグリッチ画像
byte_check = 30のグリッチ画像
byte_check = 40のグリッチ画像