クリエイター手抜きプロジェクト[317]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");

【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

長野県松本市には、草間彌生デザインな赤いぶつぶつが全面に貼り付いたバスが走ってます。街中で見ると、ちょっと異様な感じ。
< http://bit.ly/JoNzCg
>

Adobe CS6より前のバージョンが入っているマシンにAdobe CS6を入れると、いろいろ動かなくなるといった不具合がある、というメールやTwitterが。
また、CS6からはJavaScriptリファレンスが付属していません。ということで、リファレンスは以下のページからダウンロードして使うようです。

・Photoshop JavaScriptリファレンス
< http://www.adobe.com/devnet/photoshop/scripting.html
>

・Illustrator JavaScriptリファレンス
< http://www.adobe.com/devnet/illustrator/scripting.html
>

・Adobe Illustrator CS6使い方辞典
< http://www.openspc2.org/reibun/IllustratorCS6/
>

・PDF構造解説
< http://www.amazon.co.jp/dp/4873115493
>

・10日で覚えるHTML5入門教室
< http://www.amazon.co.jp/dp/4798124184
>

・AndroidのためのHTML5本格アプリ開発
< http://www.amazon.co.jp/dp/4897978971/
>

・新標準HTML5 & CSS3辞典
< http://www.amazon.co.jp/dp/4844331752/
>

・Google API Expertが解説するHTML5ガイドブック
< http://www.amazon.co.jp/dp/4844329278/
>

・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199
>

・毎度おなじみASCII.jpの連載
「ブラウザーにファイルを残せるFile system APIの使い方」
< http://ascii.jp/elem/000/000/686/686064/
>

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。