2022年12月25日
新規レイヤーを作成(ダイアログなし)
新規にレイヤーを作成(ダイアログなし)するスクリプトです。
Photoshopではショートカットを使って新規にレイヤーを作れますが、スクリプトでできても便利だろうということで作りました。
また、ショートカットで実行した「レイヤーを作成(ダイアログなし)」をアクションに登録することもできますが、あえてスクリプトで..
スクリプト中の関数「getSelectedLayersInfo()」の部分は他所で公開されていたものを使わせてもらってます。
スクリプト本体を「Scripts」フォルダにコピーし、Photoshopを再起動すればメニューに追加されると思います。
これにはショートカットを割り当てられます。
Photoshop でのスクリプト
// https://stackoverflow.com/questions/63448143/get-selected-layers
/*
if (activeDocument.activeLayer.typename == "LayerSet") {
activeDocument.activeLayer.artLayers.add();
} else if (activeDocument.activeLayer.parent.typename == "LayerSet") {
activeDocument.activeLayer.parent.artLayers.add();
} else {activeDocument.artLayers.add();
}*/
var layers = getSelectedLayersInfo();
for (var i = 0; i < layers.length; i++) {
var n = i;
}createLayer(layers[n].id + 1);
function getSelectedLayersInfo() {
var lyrs = [];
var lyr;
var ref = new ActionReference();
var desc;
var tempIndex = 0;
var ref2;
ref.putProperty(stringIDToTypeID("property"), stringIDToTypeID("targetLayers"));
ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
var targetLayers = executeActionGet(ref).getList(stringIDToTypeID("targetLayers"));
for (var i = 0; i < targetLayers.count; i++) {
ref2 = new ActionReference();
// if there's a background layer in the document, AM indices start with 1, without it from 0. ¯\_(ツ)_/¯
try {
activeDocument.backgroundLayer;
ref2.putIndex(charIDToTypeID('Lyr '), targetLayers.getReference(i).getIndex());
desc = executeActionGet(ref2);
tempIndex = desc.getInteger(stringIDToTypeID("itemIndex")) - 1;
} catch (o) {
ref2.putIndex(charIDToTypeID('Lyr '), targetLayers.getReference(i).getIndex() + 1);
desc = executeActionGet(ref2);
tempIndex = desc.getInteger(stringIDToTypeID("itemIndex"));
}
lyr = {};
lyr.index = tempIndex;
lyr.id = desc.getInteger(stringIDToTypeID("layerID"));
lyr.name = desc.getString(charIDToTypeID("Nm "));
lyrs.push(lyr);
}
return lyrs;
}function createLayer(idx) {
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass(stringIDToTypeID("layer"));
desc.putReference(stringIDToTypeID("null"), ref);
desc.putInteger(stringIDToTypeID("layerID"), idx);
executeAction(stringIDToTypeID("make"), desc, DialogModes.NO);
}
スクリプトを実行すると、新規にレイヤーが作られます。
グループにも対応し、レイヤーを選択した状態で実行するとひとつ上に作成されます。
更新履歴
- 2022年12月25日新規掲載New
- 20xx年xx月xx日更新情報が入りますラベル
- 20xx年xx月xx日更新情報が入りますラベル
- 20xx年xx月xx日更新情報が入りますラベル
- 20xx年xx月xx日更新情報が入りますラベル