このページの本文へ

PROGRAMMING 古籏一浩のJavaScriptラボ ― 第24回

JavaScriptでRSSからPhotoshop画像を生成!

2010年02月03日 11時00分更新

古籏一浩

  • この記事をはてなブックマークに追加
本文印刷

※この記事は「古籏一浩のJavaScriptラボ」の第24回です。過去の記事も合わせてご覧ください。

Adobe Bridge

 Adobe Creative Suiteの「Adobe Bridge」は、JavaScriptを使ってさまざまな画像処理を自動化できます。前回はサーバーからRSSファイルを取得する方法を解説しました。今回は、BridgeからPhotoshopを操作し、サーバーから取得したRSSを元に画像を作成する処理を作成します。BridgeのJavaScriptは、単純にBridgeからPhotoshopのスクリプトを実行するだけでなく、Photoshopからの戻り値を受け取れます。つまり、Bridge←→Photoshop間でデータをやり取りできるのです。

■シリーズラインナップ


BridgeとPhotoshopでデータをやり取りする

 BridgeとPhotoshopなどのアドビ製アプリケーションと通信するには、「Bridge Talk」という機能を使います。Bridge Talkは専用のオブジェクトをnew BridgeTalk()で作成して使用します。

 BridgeTalkオブジェクトを生成したらtargetプロパティに実行したいアプリケーション名を指定します。Bridgeのスクリプトの1行目に記述する#target(関連記事)と同じように、Photoshopなら「Photoshop」、Illustratorなら「Illustrator」のように指定します。また、「Photoshop-10」のようにバージョンも指定できます。

 ターゲットを設定したら実行したいスクリプトをbodyプロパティに設定します。簡単な例として、Photoshopで320×240サイズ(単位を指定していないので320cm×240cmサイズのキャンバスが作成される場合もあります)の新規ドキュメントを作成してみましょう。Photoshopで新規ドキュメントを作成するには、以下のようにapp.documents.add()とします。作成するドキュメントの横幅、縦幅を引数に指定します。


app.documents.add(320, 240)


 このスクリプトを文字列としてBridge Talkオブジェクトのbodyプロパティに入れます。あとはsend()メソッドを呼び出すと、Photoshop上でスクリプトが実行されます。サンプル01を実行するとPhotoshopで新規にドキュメントが作成されます。

Photoshopで新規にドキュメントが作成されます
Photoshopで新規にドキュメントが作成されます

●サンプル01


#target "Bridge"
var bt = new BridgeTalk();
bt.target = "Photoshop";
bt.body = "app.documents.add(320, 240)";
bt.send();


 サンプル01のように、Bridgeのスクリプト内にPhotoshopのスクリプトを直接書くと、プログラムにバグがあるときに、原因がBridgeなのかPhotoshopなのか特定しにくいなど、いろいろ不都合があります。そこで、Photoshopのスクリプトは別のファイルとして保存しておき、Bridgeのスクリプトから呼び出す方法を採りましょう。以後は、Photoshopで実行するスクリプトファイルが、ユーザーのホームフォルダ内にあるものとします。

 サンプル01のPhotoshopのスクリプト部分を「ps_newdoc.jsx」として保存したものを実行するには、サンプル02のようにファイルとして読み込み、bodyプロパティに入れます。BridgeのスクリプトからPhotoshopのスクリプトを呼び出す方法にしておけば、PhotoshopのスクリプトはPhotoshop上で動作テストができるのでスクリプトの作成も楽になります。また、既存のスクリプトファイルも流用できます。

 ここまでは、BridgeからPhotoshopへの一方通行でした。次に、PhotoshopからBridgeにデータを受け渡してみましょう。


●サンプル02


#target "Bridge"
var bt = new BridgeTalk();
bt.target = "Photoshop";
var fileObj = new File("~/ps_newdoc.jsx");
var flag = fileObj.open("r");
if (flag){
    bt.body = fileObj.read();
}
bt.send();



●サンプル03


app.documents.add(320, 240);


この記事の編集者は以下の記事をオススメしています

ASCII.jp会員サービス 週刊Web Professional登録

HTMLリファレンス誘導バナー

CSSリファレンスサイト誘導バナー

Webディレクター江口明日香が行く

ランキング