FTPで画像をダウンロードし加工後FTPでアップロードする (Photoshop CS3編)

今回はPhotoshop CS3でFTPサーバーから画像をダウンロードし、加工処理を行った後、FTPサーバーにアップロードするサンプルです。これまでのパターンと基本的には同じです。Bridge CS3を経由しFTPサーバーにアクセスを行います。
スクリプトは3つに分けて作成しておき、ダウンロードするスクリプトとアップロードするスクリプト、そしてそれらを制御するスクリプトになります。サンプルではダウンロードするスクリプトとアップロードするスクリプトはホームフォルダに入れておきます。また、必ずホームフォルダにオリジナルファイルを入れる必要はなくエイリアス/ショートカットでも動作します(Windowsでは動作チェックしていませんが多分大丈夫でしょう)。
サーバー名とアカウントなどはプログラムの先頭部分で設定していますので、各自の環境に合わせて変更してください。

●ftpGetImageData.jsx
// 画像ファイルをダウンロード
getFtpData("ftp://images.dgcr.com", // FTPサーバー名
"adobe", // アカウント
"photoshop", // パスワード
"~/images/sample.jpg", // サーバー上に画像のファイルパス
"~/sample.jpg" // ダウンロードして保存する画像のファイルパス
);

// FTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getFtpData(sURL, userName, password,DLfilename,saveFilename){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = "./";
var file = new File(saveFilename);
var flag = ftp.get(DLfilename,file);
if (flag == false){
alert("ファイルをダウンロードできませんでした");
}
file.close();
ftp.close();
return file;
}


●ftpPutImageData.jsx
// 画像ファイルをアップロード
putFtpData("ftp://images.dgcr.com", // FTPサーバー名
"adobe", // アカウント
"photoshop", // パスワード
"~/sample2.jpg", // アップロード元のファイルパス
"./images/sample2.jpg" // サーバー上に置くファイルパス
);

// FTPを使って指定されたサーバーファイルをアップロードする
function putFtpData(sURL, userName, password, originalFile, uploadFilename){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = "./";
var flag = ftp.put(new File(originalFile), uploadFilename);
if (flag== false){
alert("アップロードできませんでした");
}
ftp.close();
}


これら2つのスクリプトファイルをホームフォルダに入れたら以下のスクリプトを実行します。このサンプルでは自動的にFTPサーバーからsample.jpgファイルがダウンロードされた後、Photoshopで加工処理されsample2.jpgというファイル名でFTPサーバーにアップロードされます。なお、一時的に作成されるsample.jpg、sample2.jpgは削除しないようになっています。処理が終了した後に必要に応じて削除するとよいでしょう。

// Photoshop CS3からBridge CS3を経由してFTPサーバーから画像を読み込みフィルタを適用し保存する
var fs = new File("~/ftpGetImageData.jsx");
fs.open("r");
bridge2.executeScript(fs.read());
fs.close();
// sample.jpgファイルを読み込み
var fs2 = new File("~/sample.jpg");
while(!fs2.exists);
wait(2); // 待ち時間を2秒に設定
// 画像を開く
var fileRef = new File ("~/sample.jpg");
app.open(fileRef);
// 3回、ぼかし(強)を適用
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
// JPEG形式で保存する
var saveFile = new File ("~/sample2.jpg");
jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 8;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;
activeDocument.saveAs(saveFile, jpegOpt, true, Extension.LOWERCASE);
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
// 保存したファイルをアップロード
var fs = new File("~/ftpPutImageData.jsx");
fs.open("r");
bridge2.executeScript(fs.read());
fs.close();
// 待ち時間を処理する関数
function wait(sec){
var e = (new Date()).getTime() + sec*1000;
while((new Date()).getTime() <= e);
}

 

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