Tuesday, April 16, 2019 / Photoshop, Extendscript

Yahoo オークション用 商品紹介画像のリサイズと JPEG 保存を Photoshop を使ってスクリプトでバッチ処理しようと思いたった

以前ヤフオクは画像が3点くらいしか載せられなかった記憶があるのだが、 久しぶりにヤフオクしてみると 10点まで登録できるようになっていた。 画像点数が増えたのは嬉しいが、用意するときにちょうど良い画像サイズにリサイズして JPEG 保存するという手間も増えてしまった。 ならばスクリプトを使って……

Photoshop Extendscript で画像幅を1000px にして JPGE 保存

肝心の1000px & JPEG 保存のコードはこんな感じ。

var psdFile = File('foo.psd');
var jpgFile = File('foo.jpg');

var doc = open(psdFile);
doc.resizeImage("1000px");//画像幅を1000pxに指定

var jpgOpt = new JPEGSaveOptions();
jpgOpt.quality = 12;//品質を最高に

doc.saveAs(jpgFile, jpgOpt, true, Extension.LOWERCASE);
doc.close(SaveOptions.DONOTSAVECHANGES);

紹介画像が foo.psd に用意してあるとして、スクリプト実行で foo.jpg に 画像幅を 1000px に修正した上で JPGE 形式保存する。 これで psd を jpg に変換はできたが一枚ずつならばスクリプトで処理する意味がほぼない。 このスクリプトに、さらに複数の psd ファイルを一括で JPGE に変換する function 、 psd 拡張子を jpg 拡張子に変えて保存用 jpg ファイル名を作り出す function などを追加していけば意図したスクリプトが出来上がる。

完成したスクリプト

images ディレクトリ以下の psd ファイルを jpg にバッチ変換する Extendscript。

var currentDir = function(){
    return File($.fileName).parent;
};

var toJpgFile = function( psdFile ){
    var len = psdFile.name.length;
    var suffixLen = ".psd".length;
    return File(psdFile.path+"/"+psdFile.name.substr( 0,len-suffixLen )+".jpg");
};

var convert = function(psdFile, jpgFile){
    var doc = open(psdFile);
    doc.resizeImage("1000px");

    var jpgOpt = new JPEGSaveOptions();

    jpgOpt.quality = 12;

    doc.saveAs(jpgFile, jpgOpt, true, Extension.LOWERCASE);
    doc.close(SaveOptions.DONOTSAVECHANGES);
};

var dir = Folder( currentDir().fullName + "/images/" );
var targetFileList = dir.getFiles('*.psd');

for(var i=0; i<targetFileList.length; i++ ){
    var file = targetFileList[i];
    var jpgFile = toJpgFile( file );
    convert(file, jpgFile);
}

これでヤフオク作業も少しは捗る。