Photoshopのスクリプトの作り方
- 書いた人:
- tanippa!
- カテゴリ:
- javascript PhotoShop
- 37,229 views
Webサイトを作る上で頻繁に出てくる大量の画像ファイルの処理。それの効率化の方法となるPhotoshopのスクリプトの作り方に関して今回はご紹介したいと思います。
Webサイトを作る上で、画像を大量に処理する必要は頻繁に出てくるのですが、ネット上を見る限りPhotoshopのスクリプトを自作して効率化するパターンは中々少数派のようです(日本語情報がほとんど出てこないですし…)
そこで今回はPhotoshopのスクリプトの作り方をご紹介したいと思います。
本記事の対象者
- Photoshopのスクリプトを書いて業務を効率化したいと考えている
- Javascriptはそれなりに書ける
- 英語ドキュメントを見ても体調が悪くならない
基本
Photoshopのスクリプトは複数の言語を選択することが出来るのですが、今回は一番慣れている人が多いであろうJavascriptで作成していきます。
参考ドキュメント
-
公式ドキュメント(英語)
Adobe Photoshop Scripting | Adobe Developer Connection
※こちらの「Photoshop CC JavaScript Reference 」 -
サンプルスクリプト
Adobe Photoshop CS6自動化作戦 -
日本語ドキュメント(一部)
Adobe CS6 バージョンJavaScript リファレンス
公式ドキュメントは英語なので中々読むのが辛そうに見えるかもしれませんが、全部読む必要はありません。作りたいスクリプトに必要そうなキーワードで検索して(例えばWeb用に保存を自動化したいなら「Web」で検索するとか)関係ありそうな箇所を読むだけでスクリプトを作れることが多いので、今回を期に苦手意識を克服しましょう!
スクリプトファイルの配置場所
- Mac:/Applications/Adobe Photoshop XXXX/Presets/Scripts
- Windows:C:¥Program Files¥Adobe¥Adobe Photoshop XXXX¥Presets¥Scripts¥
スクリプトファイルの拡張子は「jsx」作成してください。
(今回は例として「myscript.jsx」というファイルを作成したいと思います。)
スクリプトの実行方法
「myscript.jsx」を前述のディレクトリに作成した後Photoshopを起動すると、下の画像のように「ファイル」>「スクリプト」内に「myscript」という項目が出来ていると思います。これをクリックすると「myscript.jsx」に記述されたスクリプトが実行されます。
デバッグ等のために値を出力させたい
alertを使用することが可能です。
var tmp = 100; alert(tmp); // 100がポップアップで表示される
実際に、「myscript.jsx」に上記のコードを入力して実行すると、100がポップアップで表示されるはずです。
他の方法もあるのですが、alertを使用するのが一番手軽な方法かと思います。
実例
例1:現在アクティブなファイルのパスを表示する
例として、現在アクティブなファイルのパスを表示するスクリプトを書いてみましょう。
var doc = app.activeDocument; alert(doc.path);
「app.activeDocument」は現在アクティブなファイルの情報が入っているDocumentオブジェクトを返却します。
Documentオブジェクトには色々プロパティがあるのですが、一部を紹介すると。
プロパティ名 | 概要 |
---|---|
name | ファイル名 例)tmp.psd |
path | ファイルのパス 例)~/Desktop |
fullName | ファイルのフルパス 例)~/Desktop/tmp.psd |
width | ファイルの横幅 例)960px |
height | ファイルの高さ 例)400px |
等があります。
というわけで、アクティブなファイルのパスを表示するスクリプトは、
var doc = app.activeDocument; alert(doc.path);
となります。
詳しくは公式ドキュメントを参照してください。
このスクリプトを実行すれば現在アクティブなファイルのパスが表示されるはずです。
例2:現在アクティブなファイルをjpg出力する
次は一歩進んでファイルをjpg出力してみましょう。
画像を出力するには「exportDocument」を使用します。
実際のコードは以下のとおりです。
(これからはコードの説明は必要な箇所にコメントで記述します。)
var doc = app.activeDocument; // Fileの引数に、出力したい画像のフルパスを渡す var file = new File('~/Desktop/tmp.jpg'); // optionsは書き出しオプション var options = new ExportOptionsSaveForWeb(); // 画像形式 options.format = SaveDocumentType.JPEG; // 最適化の有無 options.optimized = true; // 画質 options.quality = 100; doc.exportDocument(file, ExportType.SAVEFORWEB, options);
画像を出力したいファイルを開いた上で、スクリプトを実行すると画像が出力されるはずです。
例3:ダイアログから選択したフォルダ直下にあるpsdファイルをjpgで一括出力する
さらに応用編で、例2の作業をフォルダに対して出来るようにしてみましょう。
その前に、まず「選択したフォルダのpsdファイルを開き、ファイル名を表示して閉じる」スクリプトを準備として作ってみましょう。
// Folder.selectDialogでダイアログを開き、フォルダを選択させる事ができる。 var folderObj = Folder.selectDialog("フォルダーを選択してください。"); // ユーザーが「キャンセル」を押した場合は処理を続けないための分岐 if (folderObj) { // getFilesでフォルダ直下にあるファイル一覧を取得出来ます。 // 引数にはファイル名の条件を指定することが出来ます。 // 今回は「*.psd」とし、拡張子が「psd」のものだけ取得するようにしています。 var fileList = folderObj.getFiles('*.psd'); // 取得したファイルそれぞれに対して処理するためにforでループ for (var i=0; i<fileList.length; i++) { var file = fileList[i]; // openで指定したファイルをPhotoshopで開くことが出来ます。 open(file); // 開いたファイルはアクティブな状態になるので、「app.activeDocument」で // Documentオブジェクトが取得出来ます。 var doc = app.activeDocument; alert(doc.name); // closeでファイルを閉じる事が出来ます // 「SaveOptions.DONOTSAVECHANGES」は「変更を保存せずに閉じる」オプションです。 doc.close(SaveOptions.DONOTSAVECHANGES); } }
さらにこれを応用して、「ダイアログから選択したフォルダ直下にあるpsdファイルをjpgで一括出力する」スクリプトを書くことが出来ます。
やることは「alert(doc.name)」の部分を例2の内容で置き換えるだけです。
var folderObj = Folder.selectDialog("フォルダーを選択してください。"); if (folderObj) { var fileList = folderObj.getFiles('*.psd'); for (var i=0; i<fileList.length; i++) { var file = fileList[i]; open(file); var doc = app.activeDocument; /*********************************************************************** ここから例2の内容 **********************************************************************/ // ここだけ、例2のままだと全て同じ名前で出力されてしまうので、 // それぞれの名前でjpgファイルが出力されるように変更しています。 var file = new File('~/Desktop/' + doc.name.replace('.psd', '.jpg')); var options = new ExportOptionsSaveForWeb(); options.format = SaveDocumentType.JPEG; options.optimized = true; options.quality = 100; doc.exportDocument(file, ExportType.SAVEFORWEB, options); /*********************************************************************** ここまで例2の内容 **********************************************************************/ doc.close(SaveOptions.DONOTSAVECHANGES); } }
これを実行すると、選択したフォルダ直下のpsdファイルがデスクトップにjpg画像として出力されるはずです。
以上
大量の画像の処理はめんどくさくて時間がかかる作業の割に得るものはほとんど無いので、積極的に自動化していきたいですね。
以上、たにっぱでした〜
参考記事
PhotoshopExtensionのつくりかたとか – Qiita