記事のタイトルをJPEGファイルとして保存
さまざまな画像フォーマットを扱えるPhotoshopは、スクリプトでも多数のファイル形式から保存形式を選べます。JPEG画像として保存する場合、new JPEGSaveOptions()を使ってJPEG保存オブジェクトを作成しておき、このオブジェクトの各プロパティに画質やプログレッシブかどうかなどを設定していきます。設定部分は以下のようになります。
jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 8;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;
embedColorProfileは、カラープロファイルを埋め込むかどうかの指定です。trueを指定するとカラープロファイルが埋め込まれます。qualityは画質で値が大きいほど劣化しなくなり高画質になります(0~12まで指定することができ、0が低品質・高圧縮率、12が高品質・低圧縮率)。
プログレッシブかどうかはformatOptionsで指定します。プログレッシブの場合、scansでスキャンラインの値を指定できます。matteはマットタイプでMatteType.NONEを指定するとマットなしになります。いずれもJPEG保存ダイアログで指定できるものですので、ダイアログに表示されるものと見比べてみると分かりやすいでしょう。
実際に保存するにはsaveAs()を使って以下のように記述します。
activeDocument.saveAs(savefileObj, jpegOpt, true, Extension.LOWERCASE)
最初の引数がファイルオブジェクト(保存先)、2番目が保存オプションを格納したオブジェクト(今回はJPEG)、3番目は複製を作成するかどうか、4番目は拡張子を小文字にするかどうかです。
これで無事にRSSの記事のタイトルがJPEG画像として保存できました。が、何度もBridge Talkを使って呼び出していると、次々と新規ドキュメントが作成されてしまい、動作速度が低下してしまいます。そこでJPEGファイルとして画像を保存したら、Photoshopドキュメントを破棄して閉じるようにしましょう。
ドキュメントを保存せずに閉じるには以下のようにします。確認のダイアログは表示されず、すぐにドキュメントが閉じられます。
activeDocument.close(SaveOptions.DONOTSAVECHANGES)
最後に、Bridge Talkに結果を知らせるためにapp.bodyにメッセージとなる文字列を入れておきましょう。Bridge側ではPhotoshopから受け取ったメッセージをダイアログに表示して処理を終了させます。
これらをまとめたものがサンプル06、サンプル07です。時間はかかりましたが、順を追って見てもらえば処理手順が分かるかと思います。
●サンプル06
#target "Bridge"
var bt = new BridgeTalk();
bt.target = "Photoshop";
var fileObj = new File("~/ps_text.jsx");
var flag = fileObj.open("r");
if (flag){
bt.body = fileObj.read();
}
bt.onResult = function(returnBtObj){
alert(returnBtObj.body);
}
bt.send();
●サンプル07
preferences.rulerUnits = Units.PIXELS;
var fileObj = new File("~/rss_title.txt");
if (fileObj.open("r") == true){
var text = fileObj.readln();
fileObj.close();
app.documents.add(520,30);
var lay = activeDocument.artLayers.add(); // レイヤーを追加
lay.kind = LayerKind.TEXT;
lay.textItem.font = "Osaka";
lay.textItem.size = 11;
lay.textItem.contents = text;
lay.translate(0, 18);
var savefileObj = new File("~/rss_title.jpg");
jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 8;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;
activeDocument.saveAs(savefileObj, jpegOpt, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
app.body="Photoshopでの処理は完了しました";
}else{
alert("ファイルが開けません");
app.body="NG";
}
◆
前回作成した、WebサーバーからRSSデータを読み込む処理と組み合わせると、ダブルクリックで自動的に記事のタイトルからJPEG画像を生成するスクリプトになります。次回は、今回生成したJPEG画像をサーバーにFTPを使って転送するスクリプトにチャレンジします。BridgeにはFTP機能もあるので、他のアプリケーションを使わずにアップロード処理まで自動化できます。
それでは、また次回。