Processingを使った簡単な画像の加工方法まとめ

相変わらず仕事が落ち着かず週末もバタバタしているので小ネタ更新です。

ここのところ実験用に画像の加工をする機会が多かったので、Processingを使った簡単な画像の加工方法をまとめてみたいと思います。

画像の読み込みと保存

画像の読み込みと保存はPImageクラスで行います。

// 画像を読み込み
PImage img = loadImage("sample.png");

// 画像を画面に表示(省略可能)
size(img.width, img.height);
image(img, 0, 0);

// 画像を保存
img.save("test.png");

loadImage関数は、通常スケッチのdataフォルダが読み込み先になりますが、ファイル名の代わりにURLと拡張子を指定する事で、Webから画像を取得することも可能です。

PImage img = loadImage("http://placekitten.com/300/300", "jpg");

画像にエフェクトをかける

PImageクラスのfilterメソッドで、画像にエフェクトをかけることができます。使えるエフェクトの一覧はAPIリファレンスに記載されています。

// 画像を読み込み
PImage img = loadImage("sample.png");

// 画像をぼかす
img.filter(BLUR, 8);

// 画像を保存
img.save("test.png");

画像の切り出しとリサイズ

画像の切り出しとリサイズは、PImageクラスのgetメソッドとresizeメソッドを使います。

// 画像を読み込み
PImage img = loadImage("sample.png");

// 画像の一部を切り出す
img = img.get(50, 50, 100, 100);

// 切り出した画像を半分の大きさにリサイズ
img.resize(img.width / 2, img.height / 2);

// 画像を保存
img.save("test.png");

画面の保存

画面の保存はsave関数を呼ぶだけです。

// 画面を適当に描画
size(300, 300);
background(128);
rect(100, 100, 100, 100);

// 画面を保存
save("screen.png");

透明度つきの画面の保存

画面をクリアする際に、background関数の代わりに透明度(アルファ)を指定したrect関数を使うことで、画面をアルファつきの画像として保存することができます。

// 画面のサイズを設定
size(300, 300);

// 透明度を指定して画面をクリア
noStroke();
fill(0, 0);
rect(0, 0, width, height);

// 画面を適当に描画
stroke(0);
fill(255, 0, 0);
rect(100, 100, 100, 100);

// 画面を保存
save("screen.png");

画面の一部の保存

画面を一度PImageにコピーすることで、範囲を限定した画面の保存が可能です。

// 画面を適当に描画
size(300, 300);
background(128);
rect(100, 100, 100, 100);

// 複製先の画像を作成
PImage img = createImage(width, height, RGB);

// 画面を画像にコピー
loadPixels();
img.pixels = pixels;
img.updatePixels();

// 画像を切り出して保存
img = img.get(50, 50, 100, 100);
img.save("screen.png");

どの操作もシンプルでわかりやすいですね。