画像の縦横比に合わせてキャンバスサイズを調整する

今回は画像の縦横比に合わせてキャンバスサイズを調整するスクリプトです。
スクリプトは大量の画像があり横のサイズと縦のサイズがバラバラ(つまり横長画像もあれば縦長画像もある)なものを横か縦のどちらかを基準にしてキャンバスサイズを調整し正方形するという処理です。Webなどで商品点数がたくさんあり、それをサムネール/JPEG形式などにして用意しなければいけない場合には便利です。いちいち手作業でやっていたら大変です。画像を開いて、横長か縦長かを確認して長い方のピクセル数に合わせてキャンバスサイズを調整し、JPEG形式で保存する・・・
そんな時にはスクリプトが威力を発揮します。以下のスクリプトはボリューム(ドライブ)の直下(ルート)にあるmotoフォルダ内にあるJPEG形式のファイルのみを開いてキャンバスサイズの調整を行ないボリューム(ドライブ)の直下(ルート)にあるresultフォルダ内に同じ名前で保存するものです。

folderRef = new Folder ("/moto/");
saveFolder = "/result/";
fileList = folderRef.getFiles("*.jpg");

jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 12;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;

function setUnit(unt){ preferences.rulerUnits = unt;}
function getUnit(){ return preferences.rulerUnits;}
function setResize()
{
var w = parseFloat(activeDocument.width);
var h = parseFloat(activeDocument.height);
if (w == h) return;
saveUnit = getUnit();
setUnit(Units.PIXELS);
if (w > h)
{
activeDocument.resizeCanvas(w,w);
}else{
activeDocument.resizeCanvas(h,h);
}
setUnit(saveUnit);
}

for (i=0; i<fileList.length; i++)
{
fileRef = new File(fileList[i].fullName);
open(fileRef);
setResize();

fileObj = new File(saveFolder+fileList[i].name);
activeDocument.saveAs(fileObj, jpegOpt, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}


JPEG画像のあるフォルダを変更するには

folderRef = new Folder ("/moto/");

の/moto/の部分をフォルダのあるパスにしてください。MacOS Xだと日本語フォルダ名があると正しく動作しません。まあ、悪く言えば日本語のファイル名を含むファイルやフォルダの場合はMacOS Xでは使い物にならないのでWindowsマシンで処理してください、という事になります。その方が安全です。

次に保存先のフォルダ名は以下の行を同様に修正してください。

saveFolder = "/result/";

今回はJPEG形式のファイルのみ開いて処理していますが、これは以下の行で指定しています。

fileList = folderRef.getFiles("*.jpg");

もし、Photoshop形式であれば

fileList = folderRef.getFiles("*.psd");

となります。GIF形式であれば

fileList = folderRef.getFiles("*.gif");

になります。EPSやPDF形式の場合は、開く際にいくつかのオプションを指定しなければなりません。今回は、これらに関してはパスさせてもらって別の機会に説明したいと思います。

次にJPEG形式で保存する際に画質を設定していますが、これは以下の行になります。

jpegOpt.quality = 12;

設定できる画質は0〜12です。これはファイルメニューからJPEG形式で保存した場合に表示されるダイアログのJPEG画質と同じです。0が一番悪い画質で12が一番良い画質になります。

サンプルスクリプトでは長い方に合わせていますが、逆に短い方に合わせて切り取りたい場合には

if (w > h)

if (w < h)

とします。>を<に変更すればOKです。




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