Romantist

Photoshop の特定のフォルダ内の複数のレイヤーを、それぞれ個別のJPEGで書き出す JSX

by AraiYuji

はじめに

標題のままなのですがPhotoshop上のフォルダ内のレイヤーを、それぞれのレイヤー名をファイル名として個別に書き出すJSX(ExtendScript)を作成してみました。

レイヤーごとの個別の書き出しは、レイヤーを選択して「書き出し形式…」を選択すれば個別書き出しは可能なのですが、下記のレイヤー構造のように画像に“重ねる透かしは共通のレイヤーを利用したいが、フォルダー内の画像はそれぞれ書き出したい”のようなときに便利です。

使い方

以下のスクリプトの2ヶ所を書き換えて保存すればすぐに利用することができます。
まずは以下のスクリプトを適当なテキストエディタにコピペしてください。


/*
 * 以下は自分の環境に合わせて書き換える
 */
// 書き出したいレイヤーが格納されているPhotoshopのフォルダ名
var LAYER_SET_NAME = 'photoshop-folder';
// 書き出し先のディレクトリのパス。ここに書き出されたjpgが保存される
var EXPORT_DIRECTORY = '/Users/username/Desktop/export';

/*
 * レイヤーセット内のレイヤーを取得
 */
var layers = activeDocument.layerSets[LAYER_SET_NAME].layers;

/*
 * レイヤーセット内のレイヤーを書き出しのためにすべて非表示にする
 */
for (var i = 0; i < layers.length; i++) {
  layers[i].visible = false;
}

/*
 * レイヤーセット内のレイヤーを1つ1つ表示して書き出す
 */
for (var i = 0; i < layers.length; i++) {
  layers[i].visible = true;
  var fileObj = new File(EXPORT_DIRECTORY + '/' + layers[i].name + '.jpg');
  var jpegOpt = new JPEGSaveOptions();
  jpegOpt.embedColorProfile = true;
  jpegOpt.quality = 10;
  jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
  jpegOpt.scans = 3;
  jpegOpt.matte = MatteType.NONE;
  activeDocument.saveAs(fileObj, jpegOpt, true, Extension.LOWERCASE);
  layers[i].visible = false;
}

コピペが完了したら以下の2ヶ所を書き換えます。

まずはレイヤーが格納されているPhotoshopのフォルダを指定している部分です。
このフォルダーに格納されているレイヤーがそれぞれのレイヤー名で保存されます。
現在photoshop-folderとなっている部分を任意のフォルダ名に書き換えてください。


var LAYER_SET_NAME = 'photoshop-folder';

次に画像の書き出し先を指定している部分です。
画像を保存したいマシンのディレクトリのパスを指定してください。
現在/Users/username/Desktop/exportとなっている部分を任意のパスに書き換えてもらえればおkです。


var EXPORT_DIRECTORY = '/Users/username/Desktop/export';

書き換えが完了したら適当な場所に適当なファイル名(拡張子は.jsx)で保存してください。

例)folder_export.jsx

保存が完了したら目的のpsdデータを開いてから、上部メニューの

ファイル > スクリプト > 参照

を選択して開いたダイアログから先程保存した.jsxのファイルを選択すれば処理が実行されます。
エラーのalertが表示されなければ処理成功です。

上記のレイヤー構造で処理を実行するとこのような形で書き出されます。