今回はインターネット上にある画像ファイルを読み込みPhotoshop CS3/CS4で加工処理した後、画像を別名で保存します。Photoshop CS3/CS4にはソケット通信機能がありますが、画像などのダウンロードはBridge CS3/CS4を経由する方が簡単です。基本的な方法はこれまでと同じです。サンプルでは読み込み、保存する画像形式はJPEGですが、PSDでもTIFFでも可能です。画像形式はPhotoshop CS3/CS4で読み込めるものであれば大丈夫です。ただし、ファイルが壊れていたり拡張子と実際の画像形式が合っていない場合にはエラーが発生します。サンプルではエラーの処理は行っていません。通信エラーがない限りは大丈夫だとは思います。
まず、以下のスクリプトで読み込むファイルがあるURLを変更してからホームフォルダにgetImageData.jsxというファイル名で保存します。
画像のURLは
var imgURL = "http://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpg";
のhttp://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpgを変更してください。
一時的にtemp.jpgファイルをホームフォルダに保存しますが、画像をリンクするのであれば以下の~/temp.jpgの部分を保存したいパスに変更してください。
var fileObj = getHttpData(imgURL, "~/temp.jpg");
これで準備OKです。
// サーバー上にある画像(JPEG)ファイルを読み込む
var imgURL = "http://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpg";
var fileObj = getHttpData(imgURL, "~/temp.jpg");
var flag = fileObj.open("r");
if(flag != true){
alert("エラーです");
}
// HTTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getHttpData(sURL, filePath){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var http = new HttpConnection(sURL);
http.response = new File(filePath);
http.execute();
http.response.close();
return new File(filePath);
}
保存したら次に以下のスクリプトをPhotoshop CS3/CS4から実行します。これでBridge CS3/CS4経由でファイルがホームフォルダにtemp.jpgという名前で保存されます。その後、Photoshop CS3/CS4でぼかし処理が行われtemp2.jpgという名前で保存されます。場合によっては保存時にダイアログが表示されることがあります。
運悪くインターネットからファイルがダウンロードできなかった場合は、ずっと待ちの状態になって終了できません。その場合は、ホームフォルダにtemp.jpgという名前のファイルを作成すれば終了します。
ぼかしは
app.activeDocument.activeLayer.applyBlurMore();
の行を3回並べて書いてあるだけですが、この命令を変更すれば様々なエフェクトを適用させることができます(どのようなエフェクトがあるかは付属のリファレンスに掲載されています)。
// Photoshop CS3からBridge CS3を経由して画像を読み込みフィルタを適用し保存する
var fs = new File("~/getImageData.jsx");
fs.open("r");
bridge2.executeScript(fs.read());
fs.close();
// temp.jpgファイルを読み込み
var fs2 = new File("~/temp.jpg");
while(!fs2.exists);
wait(2); // 待ち時間を2秒に設定
// 画像を開く
var fileRef = new File ("~/temp.jpg");
app.open(fileRef);
// 3回、ぼかし(強)を適用
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
// JPEG形式で保存する
var saveFile = new File ("~/temp2.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);
// 待ち時間を処理する関数
function wait(sec){
var e = (new Date()).getTime() + sec*1000;
while((new Date()).getTime() <= e);
}