Photoshop CS3〜6編 大量の画像のサムネールを100枚単位で生成し保存する

前々回のスクリプトは、フォルダ内にある100枚のJPEG画像のサムネールを作成し、一枚にまとめるものでした。
実際に作成したサムネールは以下の漫画/アニメ背景用資料写真で使用しています。

http://footage3.openspc2.org/sozai/manga/

ただし、前々回のスクリプトではフォルダに数千枚の画像があっても100枚までしかサムネールを作成することができません。100枚より枚数が多い場合には、100枚単位でフォルダに画像ファイルを入れておき、その都度実行しなければいけません。そして、サムネールの作成が終わったら手作業で保存する必要がありました。

今回のスクリプトは、それをさらに改良したものです。数千枚といった大量の画像がある場合は、保存時に手作業が入るため非効率的でした。そこで、今度は何十万枚あっても自動的にサムネールをJPEG形式で保存してくれるように改良しました。百万枚でも多分大丈夫だとは思います(Photoshopがメモリリークを起こしていなければ大丈夫)。

実際のスクリプトは、以下のコードになります。数千枚の画像が入ったフォルダを選択すると、そのフォルダ内に1.jpg、2.jpgといった連番ファイル名で100枚単位のサムネール画像が保存されます。


(function(){
var folder = Folder.selectDialog("フォルダを選択してください");
if (!folder){ return; }
var saveUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;
var fileList = folder.getFiles("*.jpg"); // JPEGのみ処理
var count = 0; // 参照するファイルの位置を示す
// JPEG保存オプション
var jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 6;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;
// ファイル名に付ける末尾の番号
var fileNo = 1;
// 全てのファイルを処理するまで繰り返す
while(true){
// 新規にドキュメントを作成
var docObj = documents.add(640, 640);
// 保存するファイル名を作成
var savefile = new File(folder.fullName+"/"+fileNo+".jpg");
fileNo = fileNo + 1;
for(var y=0; y<10; y++){
for(var x=0; x<10; x++){
app.open(fileList[count]);
app.activeDocument.resizeCanvas(3648+30, 3648+30, AnchorPosition.MIDDLECENTER);
app.activeDocument.resizeImage(64, 64); // 64x64サイズに画像を縮小
app.activeDocument.selection.selectAll(); // 全てを選択
app.activeDocument.selection.copy(); // コピー
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
var selReg = [ [x*64, y*64],
[x*64+64, y*64],
[x*64+64, y*64+64],
[x*64, y*64+64],
[x*64, y*64]];
docObj.selection.select(selReg);
docObj.paste(true);
docObj.selection.deselect();
docObj.flatten();
count++;
if (count >= fileList.length){
activeDocument.saveAs(savefile, jpegOpt, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
preferences.rulerUnits = saveUnit;
return;
}
}
}
activeDocument.saveAs(savefile, jpegOpt, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
preferences.rulerUnits = saveUnit;
})();

保存するサムネールファイル名を変更する場合は、以下の行を変更してください。上記のサンプルでは、サムネールファイル名は1.jpgになってしまいますが、これをabc1.jpgにしたい場合は以下のように変更します。

var savefile = new File(folder.fullName+"/"+fileNo+".jpg");
  ↓
var savefile = new File(folder.fullName+"/abc"+fileNo+".jpg");



[サンプルをダウンロード]