Skip to main content
Known Participant
March 14, 2023
Question

Hello Everyone, " this script not to work perfectly"

  • March 14, 2023
  • 1 reply
  • 1698 views

"When a horizontal image is copied and closed, select the 'HFrame' layer in the active document and paste the JPEG image. Similarly, when a vertical image is copied and closed, select the 'VFrame' layer in the active document and paste the JPEG image. Currently, copying, closing, and pasting only works for JPEG images."

This script helps in copying horizontal and vertical images and pasting them into an HFrame or VFrame. The images are automatically adjusted to fit within the layer.

#target photoshop

// Layer bounds variables
var layerBounds = activeDocument.activeLayer.bounds;
var layerWidth = layerBounds[2].value - layerBounds[0].value;
var layerHeight = layerBounds[3].value - layerBounds[1].value;

function main() {
    // Save the current dialog display settings
    var savedDisplayDialogs = app.displayDialogs;
    app.displayDialogs = DialogModes.NO;

    // 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 i = 0; i < lrs.count; i++) {
        sel.putIdentifier(s2t('layer'), p = lrs.getReference(i).getIdentifier(s2t('layerID')));
        (r = new ActionReference()).putIdentifier(s2t('layer'), p);
        (d = new ActionDescriptor()).putReference(s2t("target"), r);
        executeAction(s2t('select'), d, DialogModes.NO);

        // Layer bounds variables
        var layerBounds = activeDocument.activeLayer.bounds;
        var layerWidth = layerBounds[2].value - layerBounds[0].value;
        var layerHeight = layerBounds[3].value - layerBounds[1].value;

        // Rename the selected layers
        with (activeDocument.activeLayer) if (isBackgroundLayer === false && kind === LayerKind.NORMAL
            && kind !== LayerKind.TEXT && kind !== LayerKind.SMARTOBJECT) {
            if (layerWidth > layerHeight) {
                activeDocument.activeLayer.name = "HFrame";
            } else {
                activeDocument.activeLayer.name = "VFrame";
            }
        }
    }
    // Finish the loop

    // Restore the dialogs
    app.displayDialogs = savedDisplayDialogs;
}

// Single history stage undo
activeDocument.suspendHistory("Rename Selected layers to HFrame or VFrame.jsx", "main()");
for (var m = 0; m < app.activeDocument.layers.length; m++){
    try {
        // next document select,copy& close
        var id26 = charIDToTypeID("slct");
        var desc9 = new ActionDescriptor();
        var id27 = charIDToTypeID("null");
        var ref3 = new ActionReference();
        var id28 = charIDToTypeID("Dcmn");
        ref3.putOffset(id28, 1);
        desc9.putReference(id27, ref3);
        executeAction(id26, desc9, DialogModes.NO);
        var id29 = charIDToTypeID("setd");
        var desc10 = new ActionDescriptor();
        var id30 = charIDToTypeID("null");
        var ref4 = new ActionReference();
        var id31 = charIDToTypeID("Chnl");
        var id32 = charIDToTypeID("fsel");
        ref4.putProperty(id31, id32);
        desc10.putReference(id30, ref4);
        var id33 = charIDToTypeID("T   ");
var id34 = charIDToTypeID("Ordn");
var id35 = charIDToTypeID("Al  ");
desc10.putEnumerated(id33, id34, id35);
executeAction(id29, desc10, DialogModes.NO);
var id36 = charIDToTypeID("copy");
executeAction(id36, undefined, DialogModes.NO);
var id44 = charIDToTypeID("Cls ");
executeAction(id44, undefined, DialogModes.NO);

// Check if the copied document is horizontal or vertical
        var copiedDoc = app.activeDocument;
        var isHorizontal = copiedDoc.width > copiedDoc.height;

        // Select the appropriate layer and paste the copied document
        var layerName = isHorizontal ? "HFrame" : "VFrame";
        var layers = activeDocument.layers;
        for (var j = 0; j < layers.length; j++) {
            if (layers[j].name == layerName) {
                app.activeDocument.activeLayer = layers[j];
                break;
            }
        }
        app.activeDocument.paste();
        var id57 = stringIDToTypeID( "newPlacedLayer" );
        executeAction( id57, undefined, DialogModes.NO );
        var oldPref = app.preferences.rulerUnits  
        app.preferences.rulerUnits = Units.PIXELS;  
        var doc = activeDocument;  
        var iLayer = doc.activeLayer;   
        layerDown ();    
        var mLayerB = doc.activeLayer.bounds;  
        doc.activeLayer = iLayer;  
        var scale = Math.max((mLayerB[2]-mLayerB[0])/(iLayer.bounds[2]-iLayer.bounds[0]),(mLayerB[3]-mLayerB[1])/(iLayer.bounds[3]-iLayer.bounds[1]));  
        iLayer.resize (scale*100,scale*100);  
        iLayer.translate((mLayerB[0]+mLayerB[2])/2-(iLayer.bounds[0]+iLayer.bounds[2])/2,(mLayerB[1]+mLayerB[3])/2-(iLayer.bounds[1]+iLayer.bounds[3])/2);  
        createSmartObject(app.activeDocument.activeLayer);    
        var oldPref = app.preferences.rulerUnits  
app.preferences.rulerUnits = Units.PIXELS;  
var doc = activeDocument;  
var iLayer = doc.activeLayer;
layerDown ();
var mLayerB = doc.activeLayer.bounds;  
doc.activeLayer = iLayer;  
var scale = Math.max((mLayerB[2]-mLayerB[0])/(iLayer.bounds[2]-iLayer.bounds[0]),(mLayerB[3]-mLayerB[1])/(iLayer.bounds[3]-iLayer.bounds[1]));  
iLayer.resize (scale*100,scale*100);  
iLayer.translate((mLayerB[0]+mLayerB[2])/2-(iLayer.bounds[0]+iLayer.bounds[2])/2,(mLayerB[1]+mLayerB[3])/2-(iLayer.bounds[1]+iLayer.bounds[3])/2);  
clip ();
        var id3 = charIDToTypeID( "slct" );
    var desc2 = new ActionDescriptor();
    var id4 = charIDToTypeID( "null" );
        var ref1 = new ActionReference();
        var id5 = charIDToTypeID( "Lyr " );
        var id6 = charIDToTypeID( "Ordn" );
        var id7 = charIDToTypeID( "Bckw" );
        ref1.putEnumerated( id5, id6, id7 );
    desc2.putReference( id4, ref1 );
    var id8 = charIDToTypeID( "MkVs" );
    desc2.putBoolean( id8, false );
executeAction( id3, desc2, DialogModes.NO );

var id9 = charIDToTypeID( "setd" );
    var desc3 = new ActionDescriptor();
    var id10 = charIDToTypeID( "null" );
        var ref2 = new ActionReference();
        var id11 = charIDToTypeID( "Lyr " );
        var id12 = charIDToTypeID( "Ordn" );
        var id13 = charIDToTypeID( "Trgt" );
        ref2.putEnumerated( id11, id12, id13 );
    desc3.putReference( id10, ref2 );
    var id14 = charIDToTypeID( "T   " );
        var desc4 = new ActionDescriptor();
        var id15 = charIDToTypeID( "Nm  " );
        desc4.putString( id15, "photoframe" );
    var id16 = charIDToTypeID( "Lyr " );
    desc3.putObject( id14, id16, desc4 );
executeAction( id9, desc3, DialogModes.NO );

var id3 = charIDToTypeID( "slct" );
    var desc2 = new ActionDescriptor();
    var id4 = charIDToTypeID( "null" );
        var ref1 = new ActionReference();
        var id5 = charIDToTypeID( "Lyr " );
        var id6 = charIDToTypeID( "Ordn" );
        var id7 = charIDToTypeID( "Frwr" );
        ref1.putEnumerated( id5, id6, id7 );
    desc2.putReference( id4, ref1 );
    var id8 = charIDToTypeID( "MkVs" );
    desc2.putBoolean( id8, false );
executeAction( id3, desc2, DialogModes.NO );

var id82 = charIDToTypeID( "setd" );
    var desc15 = new ActionDescriptor();
    var id83 = charIDToTypeID( "null" );
        var ref6 = new ActionReference();
        var id84 = charIDToTypeID( "Lyr " );
        var id85 = charIDToTypeID( "Ordn" );
        var id86 = charIDToTypeID( "Trgt" );
        ref6.putEnumerated( id84, id85, id86 );
    desc15.putReference( id83, ref6 );
    var id87 = charIDToTypeID( "T   " );
        var desc16 = new ActionDescriptor();
        var id88 = charIDToTypeID( "Nm  " );
        desc16.putString( id88, "IMAGE LAYER" );
    var id89 = charIDToTypeID( "Lyr " );
    desc15.putObject( id87, id89, desc16 );
executeAction( id82, desc15, DialogModes.NO );
} catch (e) {}
};
////////////////////////////////////
////////////////////////////////////
function layerDown(){  
    var idslct = charIDToTypeID( "slct" );  
        var desc2 = new ActionDescriptor();  
        var idnull = charIDToTypeID( "null" );  
            var ref1 = new ActionReference();  
            var idLyr = charIDToTypeID( "Lyr " );  
            var idOrdn = charIDToTypeID( "Ordn" );  
            var idBckw = charIDToTypeID( "Bckw" );  
            ref1.putEnumerated( idLyr, idOrdn, idBckw );  
        desc2.putReference( idnull, ref1 );  
        var idMkVs = charIDToTypeID( "MkVs" );  
        desc2.putBoolean( idMkVs, false );  
        var idLyrI = charIDToTypeID( "LyrI" );  
            var list1 = new ActionList();  
            list1.putInteger( 3 );  
        desc2.putList( idLyrI, list1 );  
    executeAction( idslct, desc2, DialogModes.NO );  
    };
function createSmartObject(layer) {
var idnewPlacedLayer = stringIDToTypeID( 'newPlacedLayer' );
executeAction(idnewPlacedLayer, undefined, DialogModes.NO);
};
function getSelectedLayers(){ 
	var idGrp = stringIDToTypeID( "groupLayersEvent" );
	var descGrp = new ActionDescriptor();
	var refGrp = new ActionReference();
	refGrp.putEnumerated(charIDToTypeID( "Lyr " ),charIDToTypeID( "Ordn" ),charIDToTypeID( "Trgt" ));
	descGrp.putReference(charIDToTypeID( "null" ), refGrp );
	executeAction( idGrp, descGrp, DialogModes.ALL );
	var resultLayers=new Array();
	for (var ix=0;ix<app.activeDocument.activeLayer.layers.length;ix++){
        resultLayers.push(app.activeDocument.activeLayer.layers[ix]);
    };
	var id8 = charIDToTypeID( "slct" );
    var desc5 = new ActionDescriptor();
    var id9 = charIDToTypeID( "null" );
    var ref2 = new ActionReference();
    var id10 = charIDToTypeID( "HstS" );
    var id11 = charIDToTypeID( "Ordn" );
    var id12 = charIDToTypeID( "Prvs" );  
    ref2.putEnumerated( id10, id11, id12 );
	desc5.putReference( id9, ref2 );
	executeAction( id8, desc5, DialogModes.NO );
    alert (resultLayers)
	return resultLayers;
};
function clip(){  
    var idGrpL = charIDToTypeID( "GrpL" );  
        var desc7 = new ActionDescriptor();  
        var idnull = charIDToTypeID( "null" );  
            var ref6 = new ActionReference();  
            var idLyr = charIDToTypeID( "Lyr " );  
            var idOrdn = charIDToTypeID( "Ordn" );  
            var idTrgt = charIDToTypeID( "Trgt" );  
            ref6.putEnumerated( idLyr, idOrdn, idTrgt );  
        desc7.putReference( idnull, ref6 );  
    executeAction( idGrpL, desc7, DialogModes.NO );  
    };
function layerDown(){  
    var idslct = charIDToTypeID( "slct" );  
        var desc2 = new ActionDescriptor();  
        var idnull = charIDToTypeID( "null" );  
            var ref1 = new ActionReference();  
            var idLyr = charIDToTypeID( "Lyr " );  
            var idOrdn = charIDToTypeID( "Ordn" );  
            var idBckw = charIDToTypeID( "Bckw" );  
            ref1.putEnumerated( idLyr, idOrdn, idBckw );  
        desc2.putReference( idnull, ref1 );  
        var idMkVs = charIDToTypeID( "MkVs" );  
        desc2.putBoolean( idMkVs, false );  
        var idLyrI = charIDToTypeID( "LyrI" );  
            var list1 = new ActionList();  
            list1.putInteger( 3 );  
        desc2.putList( idLyrI, list1 );  
    executeAction( idslct, desc2, DialogModes.NO );  
    };
////// collect bounds of selected layers //////
function collectSelectedLayersAsDOM () {
    // get selected layers;
        var selectedLayers = new Array;
        var ref = new ActionReference();
        ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
        var desc = executeActionGet(ref);
        if (desc.getBoolean(stringIDToTypeID("hasBackgroundLayer")) == true) {var theAdd =0}
        else {var theAdd = 1};
        if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){
        desc = desc.getList( stringIDToTypeID( 'targetLayers' ));
        var c = desc.count;
        var selectedLayers = new Array();
        // run through selected layers;
        for(var i=0;i<c;i++){
        var theIndex = desc.getReference( i ).getIndex()+theAdd;
        selectLayerByIndex(theIndex, false);
        selectedLayers.push(activeDocument.activeLayer);
        };
        // if only one:
        }else{
        selectedLayers = [activeDocument.activeLayer]
        };
        return selectedLayers
    };
// by mike hale, via paul riggott;
// http://forums.adobe.com/message/1944754#1944754
function selectLayerByIndex(index,add){ 
    add = undefined ? add = false:add 
    var ref = new ActionReference();
        ref.putIndex(charIDToTypeID("Lyr "), index);
        var desc = new ActionDescriptor();
        desc.putReference(charIDToTypeID("null"), ref );
           if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) ); 
          desc.putBoolean( charIDToTypeID( "MkVs" ), false ); 
       try{
        executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
    }catch(e){
    alert(e.message); 
    }
    };

 

This topic has been closed for replies.

1 reply

c.pfaffenbichler
Community Expert
Community Expert
March 15, 2023

What is the problem? 

nandu nagAuthor
Known Participant
March 15, 2023

thanks to reply... "  You want to paste a horizontal image into an HFrame layer and a vertical image into a VFrame layer so that it fits perfectly. You also want to be able to fill all selected layers with an image in one click. The number of selected layers should correspond to the number of images filled..

// next document select,copy& close
var id26 = charIDToTypeID( "slct" );
    var desc9 = new ActionDescriptor();
    var id27 = charIDToTypeID( "null" );
        var ref3 = new ActionReference();
        var id28 = charIDToTypeID( "Dcmn" );
        ref3.putOffset( id28, 1 );
    desc9.putReference( id27, ref3 );
executeAction( id26, desc9, DialogModes.NO );
// check if document is horizontal or vertical
var isHorizontal = false;
if (app.activeDocument.width > app.activeDocument.height) {
  isHorizontal = true;
}

// select, copy, and close active document
var docRef = app.activeDocument;
docRef.selection.selectAll();
docRef.selection.copy();
docRef.close(SaveOptions.DONOTSAVECHANGES);

// select target layer and paste copied image
var targetLayerName = isHorizontal ? "HFrame" : "VFrame";
var targetLayer = app.activeDocument.layers.getByName(targetLayerName);
app.activeDocument.activeLayer = targetLayer;
app.activeDocument.paste();
c.pfaffenbichler
Community Expert
Community Expert
March 15, 2023

Please write meaningful statements and provide the files for testing. 

Write in your native tongue if necessary and we’ll see if the auto-translation can provide a useable translation. 

 

The photographic images appear to be in the layered file already, so what are you talking about »pasting«?