はじめに#
グラフィックデザインにおいて、Photoshop でレイヤー数が多い.psd
ファイルを扱う際、レイヤーを一つずつリネームするのは非常に面倒で時間がかかる作業です。
ネットで調べてみると、各サイトでは対応するバージョンのプラグインをインストールする必要があったり、スクリプトの公開日が古く、すべてのレイヤーを一括でリネームする非常に強引な方法しか見つかりませんでした。Photoshop がこれほど長い間発展してきたのに、こんなにシンプルで効率的な機能が追加されていないのは驚くべきことです。
以下はネットで広く流通しているバージョンですので、参考にしてください。
app.bringToFront();
var YourName = prompt("リネームするレイヤー名を入力してください",'入力してください')
if (documents.length == 0) {
alert("レイヤーがありません");
}
else {
var visibility = false;
var docRef = activeDocument;
changeLayerName(docRef);
}
function changeLayerName(layer){
var layers = layer.layers;
if(layers){
for(var i = 0; i < layers.length; i ++){
layers[i].name = YourName + [i];
changeLayerName(layers[i]);
}
}
}
私が必要とする機能は#
- 現在選択中のレイヤーのみを変更する
- レイヤーは任意の階層をサポートする
- これらのレイヤーに番号のサフィックスを追加できる
- できればレイヤーの
color tag
の色タグも同時に変更できる
制作手順#
テキストエディタで新しいテキストファイルを作成し、以下のコードを貼り付けます。Adobe Photoshop 2023 のスクリプト機能を使用してレイヤーを一括でリネームできます。このスクリプトは、現在のドキュメント内のすべての選択されたレイヤーを走査し、ユーザーにカスタムのレイヤー名と番号の形式を入力するように促し、ユーザーが指定した形式に従って各レイヤーに名前を付けます。スクリプトは、レイヤーがレイヤーグループ内にあるかどうかを自動的に処理します。
#target photoshop
app.bringToFront();
if (app.documents.length === 0) {
alert("開いているドキュメントがありません。");
throw new Error("No document open.");
}
var doc = app.activeDocument;
var selectedLayers = getSelectedLayers();
if (selectedLayers.length === 0) {
alert("選択されたレイヤーがありません。");
throw new Error("No layers selected.");
}
var baseName = prompt("基本レイヤー名を入力してください:", "Layer");
var startNumber = parseInt(prompt("番号の開始値を入力してください:", "1"), 10);
var numberFormat = prompt("番号形式を入力してください(例:001、桁数を保持):", "001");
if (isNaN(startNumber) || !baseName || !numberFormat) {
alert("無効な入力です。スクリプトを再実行してください。");
throw new Error("Invalid input.");
}
renameLayers(selectedLayers, baseName, startNumber, numberFormat);
function getSelectedLayers() {
var selectedLayers = [];
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var desc = executeActionGet(ref);
if (desc.hasKey(stringIDToTypeID('targetLayers'))) {
var targetLayers = desc.getList(stringIDToTypeID('targetLayers'));
for (var i = 0; i < targetLayers.count; i++) {
var layerIndex = targetLayers.getReference(i).getIndex();
selectedLayers.push(getLayerByIndex(layerIndex + 1));
}
} else {
selectedLayers.push(doc.activeLayer);
}
return selectedLayers;
}
function getLayerByIndex(index) {
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = executeActionGet(ref);
var layerID = desc.getInteger(stringIDToTypeID("layerID"));
return getLayerById(layerID);
}
function getLayerById(id) {
var ref = new ActionReference();
ref.putIdentifier(charIDToTypeID("Lyr "), id);
var desc = executeActionGet(ref);
return doc.layers.getByName(desc.getString(charIDToTypeID("Nm ")));
}
function renameLayers(layers, baseName, startNumber, numberFormat) {
for (var i = 0; i < layers.length; i++) {
var currentNumber = (startNumber + i).toString();
var formattedNumber = zeroPad(currentNumber, numberFormat.length);
var newName = baseName + formattedNumber;
layers[i].name = newName;
}
}
function zeroPad(num, width) {
while (num.length < width) {
num = '0' + num;
}
return num;
}
上記のコードは、基本的なレイヤーのリネームと番号のソート機能を実現します。ファイル名をxxx.jsx
として保存すればスクリプトファイルが完成します。
使用手順:#
- Adobe Photoshop 2023 を開きます。
- リネームしたいレイヤーを選択します(レイヤーパネルで複数選択可能で、レイヤーグループ内のレイヤーもサポートしています)。
ファイル
->スクリプト
->参照...
に進み、保存したスクリプトファイルを選択します。- スクリプトを実行すると、3 つのプロンプトが表示されます:
- 最初のプロンプトでは基本レイヤー名を入力するよう求められます(例:"Layer")。
- 2 番目のプロンプトでは番号の開始値を入力するよう求められます(例:"1")。
- 3 番目のプロンプトでは番号形式を入力するよう求められます(例:"001"、番号の桁数を一致させることを確認してください)。
- 確認を選択すると、スクリプトは設定した形式に従って選択したレイヤーを自動的にリネームします。
アドバンス版#
上記の機能は基本的には十分ですが、色タグを同時に変更する機能を追加したい場合はアドバンス版をダウンロードしてください。効果は以下の通りです:
ダウンロードリンク:
【LayerRenamer_PS-2023.jsx】 https://16b87ca7d6.znas.cn/AppH5/share/?nid=LIYDEMJQGBBDEOCELBIFU&code=r1DtQDtFZobo1ai8Jd0UylatvnNkQ3xcodyiJBPo4ejLcOfybeyVGW0o3LOTKTHF&mode=file&display=list 有効期限 7 日、抽出パスワード:6633
この記事は少数派に初掲載されました。