日曜日, 6月 05, 2016

Processingで画像を読み込みたいけどファイルの数や名前が分からない場合

課題

Processingで大量の画像を読み込んで処理したかったのだけど、標準のloadImage()を使おうとするとファイル数やファイル名が予め分かっていないといけない。つまり画像ファイルを追加したり削除したりすると、それに合わせてコードも修正しなければならない訳で、保守性も効率も悪い。

解決法

JavaにFilenameFilterというインターフェースがあるので、新しくクラスを作ってacceptメソッドをオーバーライドする。

import java.io.File;
import java.io.FilenameFilter;

public class PngFileFilter implements FilenameFilter {
  @Override
  public boolean accept(File directory, String fileName) {
    if(fileName.endsWith(".png")) {
      return true;
    }
    return false;
  }
}

PngFileFilterクラスのインスタンスを作り、こんな感じでFileクラスのlistFilesメソッドに渡すと、".png"で終わるファイルが配列として返ってくる。ちなみにdataPath("")という関数を使うとdataフォルダまでのパスが取得できる。空の文字列を渡しているが、フォルダがある場合はその名前を指定できる。リファレンスに載っていないのである日突然なくなる可能性はある。

File[] imageFiles;
PngFileFilter filter;
void setup() {
  size(800, 800);
  filter = new PngFileFilter();
  imageFiles = new File(dataPath("")).listFiles(filter);
  for(File file: imageFiles) {
    println(file.getName());
  }
}

RubyとかPythonだと特定のフォルダ以下のアセットを特定の拡張子で読み込むのが簡単なので、ああいう感じの書き方にできるとより便利。他の言語や環境から学ぶことは沢山ある。

Link list 2016-05

FathomのMITでの授業

https://fathom.info/4s50/index.html

Drawing vector field

https://generateme.wordpress.com/2016/04/24/drawing-vector-field/

The Center for Genomic Gastronomy - Studying the biotechnologies and biodiversity of human food systems.

http://genomicgastronomy.com/

Killer Queen

http://killerqueenarcade.com/ 10人で遊ぶアーケードゲーム。めちゃくちゃ面白いらしい。

Conservation

https://github.com/REAS/studio/wiki/Conservation Casey Reasによるソフトウェアアートの保護について。ソースコードはガイドであって作品ではないと言っている。

MUSIC SIGNAL PROCESSING

http://www.ee.columbia.edu/~dpwe/e4896/outline.html

元Redditの人が作った荒れないコミュニティサービス

http://www.wired.com/2016/05/imzy/ 複数の人格を使い分けながら匿名性を保つ設計

渋滞のシミュレーション

http://www.traffic-simulation.de/

棒の手紙

http://homepage3.nifty.com/hirorin/bonotegami.htm 不幸の手紙がエラーを起こしながらコピーされる様子

Study for Fifteen Points – Random International

http://www.creativeapplications.net/science/study-for-fifteen-points-random-international/

Jller – Industrial automation and historical geology

http://www.creativeapplications.net/processing/jller-industrial-automation-and-historical-geology/

Study for Fifteen PointsとJllerはコンピュータを介した表現でありながらスクリーンから出るヒントを示している。正確さが強度を持つ。