フォルダ内のすべてのJPEG画像を一括変換
サンプル03で、画像ファイルや保存先を選択できるようになりました。次に、フォルダ内にあるすべてのJPEG画像に対してフィルター処理を一括して適用する方法を紹介します。この方法なら、大量の画像ファイルが存在する場合でも楽にさばけるので便利です。
最初に、Folder.selectDialog()を使って、フォルダを選択するためのダイアログを表示します。引数にはダイアログに表示する文字を指定します。
Folder.selectDialog()でフォルダが選択されると、フォルダオブジェクトが返されます。キャンセルボタンが押された場合は他のダイアログ同様に、nullを返します。
フォルダ内にあるJPEG画像をピックアップするには、フォルダオブジェクトのgetFiles()を使います。このgetFiles()のパラメータに"*.jpg"と指定すると、JPEGファイルだけがピックアップされ配列に格納されます(*2)。あとは、配列に入っている画像オブジェクトをnew BitmapData()の引数に渡していきます。この処理を配列の数だけ繰り返せば、フォルダ内にあるすべてのJPEG画像ファイルに対して、フィルター処理を実行できます。
実際のスクリプトはサンプル04です。フォルダを選択するとフォルダ内にあるJPEG画像をピックアップし、ファイル名の先頭にred_の接頭語をつけて同じフォルダに保存します。
●サンプル04
#target "Bridge"
var folderObj = Folder.selectDialog("フォルダを選択してください");
if (folderObj){
var fileList = folderObj.getFiles("*.jpg");
for (var i=0; i<fileList.length; i++){
var myCanvas = new BitmapData(fileList[i]);
for(var y=0; y<myCanvas.height; y++){
for(var x=0; x<myCanvas.width; x++){
var colorObj = new Color(myCanvas.getPixel(x, y));
var R = colorObj.red;
var G = colorObj.green;
var B = colorObj.blue;
R = R * 2;
if (R > 255) R = 255;
G = Math.floor(G / 2);
B = Math.floor(B / 2);
var myColor = new Color(R, G, B);
myCanvas.setPixel(x,y, myColor);
}
}
var savePath = fileList[i].path + "/";
var fname = "red_"+fileList[i].name;
myCanvas.exportTo(new File(savePath + fname), 100);
}
}
(*2) "*"と指定した場合は全てのファイルが対象になります。