はじめに

ドリコムのデザイナー、CBです。今回はデザイナーに向けて、Photoshopの自動化について少し紹介させていただこうと思います。

自動化するということ

繰り返し発生する作業、単純だけど手間がかかる作業、そういった作業は自動で行えると楽ですよね。面倒な作業から解放され気分的に楽になれるだけでなく、何より自動化することで間違いをなくすことができます。
自動化の方法として、Photoshopにはアクション機能があります。そしてバッチ処理やドロップレットなどアクションをさらに便利に使える機能もあります。書き出しについては、画像アセット機能がついたことで格段に便利になりました。
そして今回紹介するスクリプトです。これによりアクションでは出来ないことも出来るようになります。

スクリプトってなんだ?

Photoshopのメニューの「ファイル」の中に「スクリプト」とあります。これが今回紹介するものなのですが、Photoshop JSXとも呼ばれています。JavaScript(通称:js)でフォトショップを動かすというものです。Illustorator、InDesignなども同様に、それぞれのスクリプトで処理を走らせることが可能です。
Photoshop JSXを記述した拡張子.jsxのファイルを実行して、処理を行うのですが、実行の仕方は、以下の通りです。

1.ファイルを指定して実行する方法

外部ファイルとしてJSXファイルを参照する場合は
メニュー>ファイル>スクリプト>参照からJSXファイルを指定します

2.フォトショップのメニューに表示させる方法

/Applications/Adobe Photoshop CC/Presets/ScriptsにJSXファイルを入れると
メニュー>ファイル>スクリプトで選べるようになります

3.アイコンにドラッグ&ドロップ

JSXファイルをフォトショップのアイコンにドラッグ&ドロップすると実行されます

といった具合です。
残念ながら、スクリプトの作成や改造にはJavaScriptの知識が必要なため、誰でも簡単にとはいきませんが、JSXでどのようなことができるのか、例を挙げてご説明しましょう。

実例紹介

あるゲームでキャラクター追加の際に必要となる画像を書き出すお仕事がありました。
作業ファイルのPSDは1ファイルに、アイコンなど、そのキャラクターの画像を使った全てのパーツが収められています。スマートオブジェクトで一箇所のキャラクター画像を変えると全て差し変えられるようになっていて、あとはサイズと位置を調整すればよい仕組みになっていました。キャラクターを配置したら、属性やレア度により表示を切り替えます。

1体分を書き出すまでの作業手順は、次の通りです。

  1. フォーマットのPSDをコピー
  2. PSDファイルをリネーム
  3. キャラクター画像を差し替え ★
  4. 画像位置、サイズ調整
  5. キャラクター名入力
  6. 背景画像変更(属性別・2カ所)
  7. レア度枠変更 (表示切り替え)
  8. 属性アイコン変更 (表示切り替え)

「3.キャラクター画像を差し替え」については前述の通りスマートオブジェクトにすることで差し替えの手間が減らされています。
ですが、他は参考データを見ながら手作業になり、面倒です。そこでこの作業を見直すことにしました。
Photoshop JSX を使って自動化できた手順は次の通りです(☆印)。

  1. フォーマットのPSDをコピー ☆
  2. PSDファイルをリネーム ☆
  3. キャラクター画像を差し替え ★
  4. 画像位置、サイズ調整
  5. キャラクター名入力 ☆
  6. 背景画像変更(属性別・2カ所) ☆
  7. レア度枠変更 (表示切り替え) ☆
  8. 属性アイコン変更 (表示切り替え) ☆

なんと、3と4以外自動化できたのです。




まず、この作業を行うにあたり、更新に必要なキャラクター名、id、属性、レア度などのデータリストをCSVファイルで用意することにしました。今回は、1ファイルにその回の追加分だけ載せています。このファイルをJSXで読み込んで各値を参照し処理をさせようというわけです。




作成したJSXを実行すると次のように処理が行われます。
ダイアログでフォーマットPSDのある場所を聞かれますので、選択します。
すると、選択したPSDがコピーされ、CSVから取得した値をもとにファイル名がリネームされます。



次に、複製されたPSDに、CSVから得た値をもとにキャラクター名の差し替え、背景画像、レア度枠、属性アイコンの表示非表示切り替えが行われます。
そして作業した日付のフォルダが作成され、その中にPSDが保存されます。
ここまでの作業を自動で繰り返しCSVのリストに入っているキャラクター全てのPSDを用意します(実際はさらにキャラクターかアイテムかの振り分けも行うように作りました)。
と、ここまでを自動で処理してくれます。



あとは手動で出来上がったPSDキャラクター画像を読み込んで、位置とサイズの微調整、文字詰めの調整を行えばよいだけとなります。
自動で行うため、入力ミスもなく作業が行え、作業時間がだいぶ短縮されました。

他にどんなことができるの?

ご紹介したこと以外にも、書き出しはもちろん、レイヤーのリネームやソート、画像データの読み込みを自動化したり、テキストファイルも書き出すことができるので、書き出したファイル名のリストをテキストファイルで一緒に書き出すこともできます。
例えば、各レイヤーをCSVファイルと照らし合わせながらPNG書き出しをする場合、CSVにデータのなかったレイヤー名や、もしくCSVにはあるが、レイヤーが存在しなかったidを、画像と一緒にテキストファイルで書き出すなどといった使い方もできます。

また、便利な使い方として、1ファイルだけ処理するスクリプトでも、アクションにスクリプトの実行を登録して、それをバッチ処理で複数ファイルを処理するという方法もあります。この方法であれば複数処理用にスクリプトを書かなくても済みます。

自動化に大切なこと

JSXによる自動化をする場合、PSDファイルのレイヤーがきちんと整理されていることが大切です。複数ファイルを処理する場合は同じレイヤー構造になっている方が、JSXの作成がしやすいです。レイヤー名も各ファイル共通のものについては、同じ名前にそろえた方がよいでしょう(背景、BG、backgroundなど、バラバラにしない)。
ですからフォーマット作成時に自動化を意識したレイヤー構成を考えることが重要です。

終わりに

今回、JSXについて書かせていただきましたが、大量のデータ書き出しや運用でのルーチンワークに是非活用していただきたいと思います。自分で作れなくてもエンジニアさんに相談してみるとよいでしょう。ネットで汎用的なものが配布されていたり、ソースコードが紹介されているので、それらを利用するのもよいかと思います。

以上、作業効率化の助けになれば幸いです。
最後まで読んでいただき、ありがとうございました。