@Delta2487
Here is a script based on my previously suggested "A" approach:
/*
Create Slices From Selected Layers Bounds vA1.jsx
Stephen Marsh
vA1.0 - 22nd November 2025
https://community.adobe.com/t5/photoshop-ecosystem-discussions/script-to-create-and-rename-slices-for-selected-layers/td-p/15603067
*/
#target photoshop
// Single history stage undo
activeDocument.suspendHistory("Create Slices From Selected Layers Bounds", "main()");
function main() {
// Get the selected layers: courtesy of jazz-y
var s2t = stringIDToTypeID;
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('targetLayersIDs'));
r.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
var lrs = executeActionGet(r).getList(p),
sel = new ActionReference();
// Loop over the selected layers: courtesy of jazz-y
for (var l = 0; l < lrs.count; l++) {
sel.putIdentifier(s2t('layer'), p = lrs.getReference(l).getIdentifier(s2t('layerID')));
(r = new ActionReference()).putIdentifier(s2t('layer'), p);
(d = new ActionDescriptor()).putReference(s2t("target"), r);
//d.putBoolean(s2t("makeVisible"), false);
executeAction(s2t('select'), d, DialogModes.NO);
///// Start doing stuff to the selected layers /////
//alert(app.activeDocument.activeLayer.name);
createSliceFromActiveLayerBounds();
renameActiveSliceToLayerName();
///// Stop doing stuff to the selected layers /////
}
}
///// Functions /////
function createSliceFromActiveLayerBounds() {
var doc = app.activeDocument;
var layer = doc.activeLayer;
// Ensure pixel units
var originalRuler = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
// Get layer bounds in pixels (redundant, but it can't hurt)
var b = layer.bounds;
var left = b[0].as("px");
var top = b[1].as("px");
var right = b[2].as("px");
var bottom = b[3].as("px");
// Build the slices using AM code
var idMk = charIDToTypeID("Mk ");
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass(stringIDToTypeID("slice"));
desc.putReference(charIDToTypeID("null"), ref);
var sliceDesc = new ActionDescriptor();
sliceDesc.putEnumerated(
charIDToTypeID("Type"),
stringIDToTypeID("sliceType"),
stringIDToTypeID("user")
);
var rect = new ActionDescriptor();
rect.putUnitDouble(charIDToTypeID("Top "), charIDToTypeID("#Pxl"), top);
rect.putUnitDouble(charIDToTypeID("Left"), charIDToTypeID("#Pxl"), left);
rect.putUnitDouble(charIDToTypeID("Btom"), charIDToTypeID("#Pxl"), bottom);
rect.putUnitDouble(charIDToTypeID("Rght"), charIDToTypeID("#Pxl"), right);
sliceDesc.putObject(charIDToTypeID("At "), charIDToTypeID("Rctn"), rect);
desc.putObject(charIDToTypeID("Usng"), stringIDToTypeID("slice"), sliceDesc);
executeAction(idMk, desc, DialogModes.NO);
// Restore the original ruler units
app.preferences.rulerUnits = originalRuler;
}
function renameActiveSliceToLayerName() {
var layerName = app.activeDocument.activeLayer.name;
var idsetd = charIDToTypeID("setd");
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(
stringIDToTypeID("slice"),
charIDToTypeID("Ordn"),
charIDToTypeID("Trgt")
);
desc.putReference(charIDToTypeID("null"), ref);
var inner = new ActionDescriptor();
inner.putString(charIDToTypeID("Nm "), layerName);
desc.putObject(
charIDToTypeID("T "),
stringIDToTypeID("slice"),
inner
);
executeAction(idsetd, desc, DialogModes.NO);
}
... View more