目的

  • 日々の、画像関連の定形作業を自動化し、クリエイティブタスクに集中できる時間を増やす
  • プロジェクト内のデザイン成果物の属人化排除、品質の一定担保

手法の検討

手法の洗い出し

下記2パターンが存在する

  • アクション
    • (Excelで言うマクロに近い機能)で作業を記録し、「バッチ」機能で対象フォルダに対し一括適応する
  • スクリプト
    • 「JSX(ExtendScript。Adobe系ソフトの作業を自動化できるJavaScript主体の言語)、もしくはAppleScriptで作業内容をスクリプト化する

手法の選択

今回は、JSXを選択。深ぼってゆく。

JSXのほうが、習得難易度が高いがより細かな制御ができる。(例えば、次のことはスクリプトでは行えるが、アクションでは不可)

  • スクリプトでは、条件判断のロジックを追加して、現在の状況に基づいた「判断」を自動的に行うことが可能
    • 例えば、「選択領域が 2 × 4 インチよりも小さければ緑色の境界を追加し、そうでない場合は 赤色の境界を追加する」というように
  • 複数のアプリケーションに対するアクションを、1 つのスクリプトで実行可能。
    • 例えば、 使用するスクリプト言語によっては、同じスクリプトの中で、Photoshop だけでなくAdobe IllustratorCS6 など)もターゲットにすることが可能
  • スクリプトでは、ファイルを開いたり、保存したり、名前の変更を行ったりすることが可能
  • スクリプトは、簡単に他のマシンに配布可能(アクションは、使用するマシンを変えるたびに、(基本的に)今まで使用していたアクションをもう一度作り直す必要がある
  • スクリプトでは、柔軟性の高い方法を使用可能(アクションでファイルを開く場合、ファイルの場所をハードコードする必要がある。スクリプトでは、ファイルパスに変数を使用可能

※詳細は、Scripting_Pluginに同梱されているマニュアル参照

実施してみる

  • 下記は、最も基本的なスクリプトの例
// getLayers.jsx
// レイヤー名の取得(ただし第一階層のみ)

function getLayers(){
     //レイヤーの情報を取得
     var layers = activeDocument.layers;

     //PSDファイルのレイヤー名を表示
     for(var i = 0, l = layers.length; i<l; i++){
          alert(layers[i].name);
     }
}

//スクリプトを実行
getLayers();

上記スクリプトを、「getLayers.jsx」として下記Photoshopのスクリプトフォルダに保存する。

/Applications/Adobe Photoshop CS6/Presets/Scripts/

すると、「ファイル」>「スクリプト」から選択できるようになる

普段行なっている作業を、スクリプト化する

まず、下記ファイルをダウンロードする

Scripting_Plug_In_Release.dmg

ダウンロードしたファイルを解凍し、中にある「Utilities」フォルダを下記フォルダに移動

MacApplications/Adobe Photoshop CS6/Plug-ins/

その後、Photoshopを再起動して、Plug-inを有効化する。すると、デスクトップ上に「ScriptingListenerJS.log」というファイルが出力されている。 以後、すべてのPhotoshop操作が、Scriptとしてこのファイルに保存される(tail -f とかしておくと面白い)

tail -f ~/Desktop/ScriptingListenerJS.log

// =======================================================
var idAdobeScriptAutomationScripts = stringIDToTypeID( "AdobeScriptAutomation Scripts" );
    var desc1 = new ActionDescriptor();
    var idjsNm = charIDToTypeID( "jsNm" );
    desc1.putString( idjsNm, """ActiveLayer""" );
    var idjsMs = charIDToTypeID( "jsMs" );
    desc1.putString( idjsMs, """null""" );
executeAction( idAdobeScriptAutomationScripts, desc1, DialogModes.NO );


・・・・


まとめ

  • JSXでの利用を前提としてプロファイルを作成していると、レイヤ名などの命名規則も自然と気を使うし、レイヤ構造の整理される。
  • 画像管理の工数は、頬っておくとどんどん膨らむので、開発フェーズで出来る限りスクリプト化してワークフローを確立することが、運用品質担保につながる。
  • しかしながら、思い通りに扱うにはJSXは敷居が高い。利用シーンは慎重に選ぶ(なんでもかんでもスクリプト化するようなことは工数対効果に合わない)

Keyword

  • Active Layer
    • 現在選択状態になっているレイヤー

reference sample Scripts

基本的なサンプルスクリプトは、Scripting_Pluginに同梱されている その他、下記のように配布されているものもある

reference sites



blog comments powered by Disqus

Categories

Tags

iPhone Sales

Books

Pinboard