Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Photoshop scripting documentation

New Here ,
May 05, 2023 May 05, 2023

Hello devs,

 

I am planning to write some scripts for photoshop for a friend of mine. As of my knowlege the latest documentation for scripting dates back to 2020. Is there an active guide anywhere? I am looking to manipulate layers. I would like to distribute two uneven layers horizontally and center them vertically to be persice.

 

Any help is much appreciated. 

TOPICS
Actions and scripting
1.7K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

New Here , May 13, 2023 May 13, 2023

Hello @Stephen Marsh , thank you for your reply.

Scripting Listener dowsnt work on Apple MacBookPro 13-inch, M2, 2022.
I was able to write the script with help from the documentation above. 

 

var doc = app.activeDocument;

var selectedLayers = getSelectedLayers();

if (selectedLayers.length == 2) {
    
    var result = idLayers(selectedLayers);

    var object = result.object
    var scale = result.scale

    var layersToDistribute = [object, scale];
    h0Vcenter(object)
    h0Vcenter(scale)
    
...
Translate
Adobe
Community Expert ,
May 06, 2023 May 06, 2023

I am aware of no newer version available as pdf. 

 

If you are new to Photoshop Scripting, I wonder if you might not be better off going with UXP right away instead of ESTK. 

 

Please post screenshots to illustrate the exact and complete layer structure of the image/s in question and th eintended operation. 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 06, 2023 May 06, 2023

There are many features which aren't covered in the Scripting DOM, which is where AM or Action Manager code and the ScriptingListener plugin comes in handy.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
May 13, 2023 May 13, 2023

Hello @Stephen Marsh , thank you for your reply.

Scripting Listener dowsnt work on Apple MacBookPro 13-inch, M2, 2022.
I was able to write the script with help from the documentation above. 

 

var doc = app.activeDocument;

var selectedLayers = getSelectedLayers();

if (selectedLayers.length == 2) {
    
    var result = idLayers(selectedLayers);

    var object = result.object
    var scale = result.scale

    var layersToDistribute = [object, scale];
    h0Vcenter(object)
    h0Vcenter(scale)
    distributeRow(object, scale);
} else {
    alert("Please select 2 players");
}
function h0Vcenter(layer) {
    var currentX = layer.bounds[0].value;
    var currentY = layer.bounds[1].value;
    var deltaX = -currentX;

    var centerY = doc.height.value / 2;
    var layerHeight = layer.bounds[3].value - layer.bounds[1].value;
    var targetY = centerY - layerHeight / 2;
    var deltaY = targetY - currentY;

    layer.translate(deltaX, deltaY);
}
function idLayers(layers) {
    var objectLayer = layers[0];
    var scaleLayer = layers[1];
    var objectWidth = objectLayer.bounds[2].value - objectLayer.bounds[0].value;
    var objectHeight = objectLayer.bounds[3].value - objectLayer.bounds[1].value;
    var scaleWidth = scaleLayer.bounds[2].value - scaleLayer.bounds[0].value;
    var scaleHeight = scaleLayer.bounds[3].value - scaleLayer.bounds[1].value;

    if (objectWidth * objectHeight < scaleWidth * scaleHeight) {
        var tempLayer = objectLayer;
        objectLayer = scaleLayer;
        scaleLayer = tempLayer;
    }

    return { object: objectLayer, scale: scaleLayer };
}
function getSelectedLayers() {
    var ActLay = app.activeDocument.activeLayer;
    ActLay.allLocked = true;
    var L = app.activeDocument.layers.length;
    var selLayers = new Array();
    for(var i = 0; i < L; i++) {
        var LayerType = app.activeDocument.layers[i].typename;
        var layerRef = app.activeDocument.layers[i];
        if (LayerType == "LayerSet" ) {
            var refLength = layerRef.layers.length;
            for(var j = 0; j < refLength; j++) {
                var refLay = layerRef.layers[j];
                if (refLay.allLocked == true){selLayers.push(refLay)}
            }
            continue;
        }
        if (layerRef.allLocked == true) {selLayers.push(layerRef)}
    }
    ActLay.allLocked = false;
    return selLayers;
}
function distributeRow(layer2, layer1) {
   
    var layer1Left = layer1.bounds[0].value;
    var layer1Right = layer1.bounds[2].value;
    var layer2Left = layer2.bounds[0].value;
    var layer2Right = layer2.bounds[2].value;

    var totalWidth = (layer1Right - layer1Left) + (layer2Right - layer2Left);
    var remainingWidth = doc.width.value - totalWidth;
    var spaceBetween = Math.round(remainingWidth / 3);

    var layer1Delta = spaceBetween - layer1Left;
    var layer2Delta = (spaceBetween * 2) + (layer1Right - layer1Left) - layer2Left;

    layer1.translate(layer1Delta, 0);
    layer2.translate(layer2Delta, 0);   
}

 so is UXP the new way of writing scripts or what?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023
quote

Scripting Listener dowsnt work on Apple MacBookPro 13-inch, M2, 2022.

Did you disable »Allow Tool Recording« in the Actions Panel? 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023

You may have to »Open using Rosetta« for ScriptingListener.plugin to record. 

Screenshot 2023-05-14 at 11.43.35.pngexpand image

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023
quote

 so is UXP the new way of writing scripts or what?


By y.antypas

 

UXP is certainly the future that is currently mapped.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023

I am curious how many maps we’re going to see yet … 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023

Yeah, I'm not bothering with UXP yet, there have been too many previous forks in the road.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 14, 2023 May 14, 2023
LATEST

I tried and so far I have not gotten far … coming from ESTK Scripting it seems a considerable change. 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines