Highlighted

How do I reverse this Layers Naming Loop?

Community Beginner ,
Jul 11, 2020

Copy link to clipboard

Copied

I cannot figure out how to reverse a loop. I need my layers to be named numerically in the opposite order (where 0 is on the bottom instead of the top). Any help would be appreciated. I'd really like it to number everything from 1 rather than 0 but I'll figure that out later.

 

//-------------------------------------------------------------------- START Name Layers Numerically

#target photoshop

for (var i = 0; i < app.documents.length; i++) {
var targetDocument = app.documents[i];
var layerCount = targetDocument.layers.length;

for (var j = layerCount - 1; j >= 0; j--) {
var targetLayer = targetDocument.layers[j];
var layerName = new String(targetLayer.name);


if (layerName.indexOf(targetLayer.name) == 0) {
targetDocument.layers[j].name = j
}

}
}

//-------------------------------------------------------------------- END Name Layers Numerically

Adobe Community Professional
Correct answer by Manan Joshi | Adobe Community Professional

Try the following

 

for (var i = 0; i < app.documents.length; i++) {
	activeDocument = app.documents[i];
	var layerCount = activeDocument.layers.length;
	var idx = 0
	for (var j = layerCount - 1; j >= 0; j--)
		activeDocument.layers[j].name = idx++
}

 

 

Edit :- I tested the code and found that we can set the layer name only if the document is active so have added that fix, also i see in the version you posted there is no need for the if statement as you are practically matching the same string which will result in a true result everytime. Have changed the code accordingly

 

-Manan

Topics

Actions and scripting, How to, Problem or error

Views

111

Likes

Translate

Translate

Report

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

How do I reverse this Layers Naming Loop?

Community Beginner ,
Jul 11, 2020

Copy link to clipboard

Copied

I cannot figure out how to reverse a loop. I need my layers to be named numerically in the opposite order (where 0 is on the bottom instead of the top). Any help would be appreciated. I'd really like it to number everything from 1 rather than 0 but I'll figure that out later.

 

//-------------------------------------------------------------------- START Name Layers Numerically

#target photoshop

for (var i = 0; i < app.documents.length; i++) {
var targetDocument = app.documents[i];
var layerCount = targetDocument.layers.length;

for (var j = layerCount - 1; j >= 0; j--) {
var targetLayer = targetDocument.layers[j];
var layerName = new String(targetLayer.name);


if (layerName.indexOf(targetLayer.name) == 0) {
targetDocument.layers[j].name = j
}

}
}

//-------------------------------------------------------------------- END Name Layers Numerically

Adobe Community Professional
Correct answer by Manan Joshi | Adobe Community Professional

Try the following

 

for (var i = 0; i < app.documents.length; i++) {
	activeDocument = app.documents[i];
	var layerCount = activeDocument.layers.length;
	var idx = 0
	for (var j = layerCount - 1; j >= 0; j--)
		activeDocument.layers[j].name = idx++
}

 

 

Edit :- I tested the code and found that we can set the layer name only if the document is active so have added that fix, also i see in the version you posted there is no need for the if statement as you are practically matching the same string which will result in a true result everytime. Have changed the code accordingly

 

-Manan

Topics

Actions and scripting, How to, Problem or error

Views

112

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Jul 11, 2020 0
Adobe Community Professional ,
Jul 11, 2020

Copy link to clipboard

Copied

Try the following

 

for (var i = 0; i < app.documents.length; i++) {
	activeDocument = app.documents[i];
	var layerCount = activeDocument.layers.length;
	var idx = 0
	for (var j = layerCount - 1; j >= 0; j--)
		activeDocument.layers[j].name = idx++
}

 

 

Edit :- I tested the code and found that we can set the layer name only if the document is active so have added that fix, also i see in the version you posted there is no need for the if statement as you are practically matching the same string which will result in a true result everytime. Have changed the code accordingly

 

-Manan

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0
Community Beginner ,
Jul 11, 2020

Copy link to clipboard

Copied

That is beautiful. Thank you for your help. I've read your notes and am digesting it. Much appreciated.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0
Most Valuable Participant ,
Jul 11, 2020

Copy link to clipboard

Copied

if any open document has a layer groups your script will not process all the layers.  You Script  is only processing top level Layers and Layer groups no layer in a group will be precessed.  You  need to use recursion to process layers in layer groups.

#target photoshop

for (var i = 0; i < app.documents.length; i++) {
	var targetDocument = app.documents[i];
	var layerCount = targetDocument.layers.length;
	var LayerProcessOrder="Layer Processed\n";
	for (var j = layerCount - 1; j >= 0; j--) {
		var targetLayer = targetDocument.layers[j];
		LayerProcessOrder = LayerProcessOrder + targetLayer.name + "\n";
		var layerName = new String(targetLayer.name);
		if (layerName.indexOf(targetLayer.name) == 0) {
			targetDocument.layers[j].name = j
		}
	}
	alert(LayerProcessOrder);
}

image.png

 

JJMack

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0
Adobe Community Professional ,
Jul 11, 2020

Copy link to clipboard

Copied

Yes JJMack you are right, i just edited what the OP had already done, if needed this can be implemented as well. I would wait for the OP's comment before adding in a new snippet of code, being lazy here what if he does not need it 😛

 

-Manan

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0
Most Valuable Participant ,
Jul 11, 2020

Copy link to clipboard

Copied

 

This will process all layers they will not be processes in stack order

 

var allLayers = "";
processArtLayers(activeDocument) 
alert(allLayers, "Layers");
function processArtLayers(obj) {  
    for( var i = obj.artLayers.length-1; 0 <= i; i--) {/* alert(obj.artLayers[i]); */processLayers(obj.artLayers[i])}  
    for( var i = obj.layerSets.length-1; 0 <= i; i--) {/* alert(obj.layerSets[i]); */processArtLayers(obj.layerSets[i])} // Process Layer Set Layers  
} 
function processLayers(layer) { 
	allLayers = allLayers + "ID " + layer.id + ", " + layer.name + ", " + layer.kind + "\n";
	switch (layer.kind){
	default : break; // none process layer types catch all
	}
} 

 

JJMack

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0
Most Valuable Participant ,
Jul 11, 2020

Copy link to clipboard

Copied

I may be right but I do not know scripting I just hack at it Often I steal others code and whack away at it make it submit to my will. I can not even type. I need a starting point.

 

Fairly Tail time.

 

Once upon a time I had some interest in Photoshop Layer stack and layers in the stack and layer kinds. So I took out my wip and whacked some code but at last  I do not remember what I did or how I did it my memory is not what it use to be. What remains are two script that seem to look at Photoshop's Layer Stack  in Layer stack order and spite out some information about the stack. LayersStack.jsx and  LayrsStackLayers.jsx  they look something like this.

 

Wait wait something is coming back to me  I seem to remember that Action Manager had some array of  its layer Kinds and DOM had it array of its Layer kinds.  Like Action Manager has a ]]Shape layer Kinds  but DOM has no Layer Kind Shape but sill manages to have more Layer Kinds than Action Manager go figure.

 

// 2019, use it at your own risk;

	//Action Manager layerKind seems to be like this. 
 	var Doclayerkind = [
	"Pixel", 
	"Adjustment", 
	"Text",
	"Shape",
	"Smartobject",
	"6",
	"Layerset",
	"3Dlayer",
	"Gradientfill",
	"Patternfill",
	"Colorfill",
	"12",
	"13",
	"14",
	"15",
	"16",
	"17",
	"18",
	"19",
	"20",
	"21",
	"22",
	"23",
	"24"
	]

var theLayers = collectLayers ();
alert("Layer Stack Height " + theLayers.length + "\n" + theLayers.join("\n") );

////// collect layers //////
function collectLayers () {
	// the file;
	var myDocument = app.activeDocument;
	// get number of layers;
	var ref = new ActionReference();
	ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
	var applicationDesc = executeActionGet(ref);
	var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
	// process the layers;	
	var theLayers = new Array;
	for (var m = 0; m <= theNumber; m++) {
		try {
			var ref = new ActionReference();
			ref.putIndex( charIDToTypeID( "Lyr " ), m);
			var layerDesc = executeActionGet(ref);
			//alert(actionDescriptor(layerDesc));
			//if (m==1) alert(actionDescriptor(layerDesc));
			var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
			var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
			// if group collect values;
			//if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" ) {
			//if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" && isBackground != true) {
				var theName = layerDesc.getString(stringIDToTypeID('name'));
				var theKind = layerDesc.getInteger(stringIDToTypeID('layerKind'));
				var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
				var theBounds = layerDesc.getObjectValue(stringIDToTypeID("bounds"));
				var theseBounds = [theBounds.getUnitDoubleValue(stringIDToTypeID("left")), theBounds.getUnitDoubleValue(stringIDToTypeID("top")), theBounds.getUnitDoubleValue(stringIDToTypeID("right")), theBounds.getUnitDoubleValue(stringIDToTypeID("bottom"))];
				layer = get_layer_by_id(theID);
				var theBlend = layer.blendMode; 
				var theOpacity = layer.opacity; 
				var theVisible = layer.visible; 
				var theType = layer.typename; 	
				var theParent = layer.parent;
				
				if (layer!=null) {theRealkind = layer.kind;}
				else {theRealkind = "";}
				if (theRealkind==undefined) {theRealkind = "LayerKind.UNDEFINED"}	
				// Action Manager layerKnd Shape
				//alert(Doclayerkind[theKind-1]);
				if (Doclayerkind[theKind-1]=="Shape") {
					//alert(actionDescriptor(layerDesc));
					var theFill= layerDesc.getBoolean(stringIDToTypeID("fillEnabled"));
					var theStrokewidth="";
					var theStrokenabled=false; 
					try {					
						var theStrokewidth = layerDesc.getObjectValue(stringIDToTypeID("AGMStrokeStyleInfo")).getUnitDoubleValue(stringIDToTypeID("strokeStyleLineWidth"));
						var theStrokenabled = layerDesc.getObjectValue(stringIDToTypeID("AGMStrokeStyleInfo")).getBoolean(stringIDToTypeID("strokeEnabled"));
					}
					//catch(e) {alert(e + ': on line ' + e.line, 'Script Error', true); }
					catch(e) { }					
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, "stroke " + theStrokewidth + " " + theStrokenabled, "fill " + theFill, theRealkind]);				
				}
				// Action Manager layerKind Adjustments		
				else if (Doclayerkind[theKind-1]=="Adjustment") {
					//alert(actionDescriptor(layerDesc));					
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}
				// Action Manager layerKind Smartobjects			
				else if (Doclayerkind[theKind-1]=="Smartobject") {
					//alert(actionDescriptor(layerDesc));					
					// get Smart Object info
					//alert(obj_to_str(layer));
					/*
					alert(["allLocke " +  layer.allLocked,
					      "\nblendMode " +  layer.blendMode,
					      "\nbound " +  layer.bounds,
					      "\nboundsNoEffect " +  layer.boundsNoEffects,
					      "\nid " +  layer.id,
					      "\nitemIndex " +  layer.itemIndex,					
					      "\nlinkedLayer " +  layer.linkedLayers,						
					      "\nname " +  layer.name,	
					      "\nopacity " +  layer.opacity,	
					      "\nparent " +  layer.parent,	
					      "\ntypename " +  layer.typename,	
					      "\nvisible " +  layer.visible,						
					      "\nxmpMetadata " +  layer.xmpMetadata]);						
					*/
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}	
				// Action Manager layerKind Text					
				else if (Doclayerkind[theKind-1]=="Text") {
					//alert(actionDescriptor(layerDesc));					
					// get text info
					//alert(obj_to_str(layer));
					/*
					alert(["allLocke " +  layer.allLocked,
					      "\nblendMode " +  layer.blendMode,
					      "\nbound " +  layer.bounds,
					      "\nboundsNoEffect " +  layer.boundsNoEffects,
					      "\nid " +  layer.id,
					      "\nitemIndex " +  layer.itemIndex,					
					      "\nlinkedLayer " +  layer.linkedLayers,						
					      "\nname " +  layer.name,	
					      "\nopacity " +  layer.opacity,	
					      "\nparent " +  layer.parent,	
					      "\ntypename " +  layer.typename,	
					      "\nvisible " +  layer.visible,						
					      "\nxmpMetadata " +  layer.xmpMetadata,					
					      "\nkind " + layer.kind,
					      "\ncolor " + layer.textItem.color,
					      "\ntextkind " + layer.textItem.kind, 
					      "\nfont " + layer.textItem.font, 
					      "\nblend " + layer.blendMode, 
					      "\nantiAliasMethod " + layer.textItem.antiAliasMethod,
					      "\nsize " + layer.textItem.size, 
						  "\nposition " + layer.textItem.position,
					      "\ncontents " + layer.textItem.contents, 					  
						  ]);
					*/
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, layer.textItem.font, layer.textItem.size, theRealkind ]);
				}	
				// Action Manager layerKind	Pixel
				// Action Manager layerKind	Layerset
				// Action Manager layerKind	Gradientfill
				// Action Manager layerKind	Patternfill
				// Action Manager layerKind	Colorfill
				// Action Manager layerKind other
				else {
					//alert(theName + "," + Doclayerkind[theKind-1]);
					//alert(actionDescriptor(layerDesc));						
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}
			//};
		}
		catch (e) {};
	};
	return theLayers
};


// DOM Layer items
function layerInfo(layer) {
	alert("LayerName='" + layer.name + "'" 
	+ "\nLayerID='" + layer.id  + "'"
	+ "\nLayerKind='" + layer.kind + "'"
	+ "\nallLocked='" + layer.allLocked + "'"
	+ "\nblendMode='" + layer.blendMode + "'"
	+ "\nbounds='" + layer.bounds + "'"
	+ "\nboundsNoEffects='" + layer.boundsNoEffects + "'"
    + "\nitemIndex='" + layer.itemIndex + "'" 
    + "\nlinkedLayers='" + layer.linkedLayers + "'"
	+ "\nopacity='" + layer.opacity + "'"
	+ "\nparent='" + layer.parent + "'"	
	+ "\ntypename='" + layer.typename + "'"	
	+ "\nvisible='" + layer.visible + "'"	
	+ "\nxmpMetadata='" + layer.xmpMetadata + "'"	
	
	);	
}

// Thanks to SuperMerlin
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function actionDescriptor(desc){  
	if(desc.typename == 'ActionDescriptor'){  
		var c = desc.count;  
		var msg= "Action Descriptor Item Count = " + c;
		for(var i=0;i<c;i++){ //enumerate descriptor's keys  
			//$.writeln('AD '+zeroPad( i+1, 2 )+' = '+IDTz(desc.getKey(i)) +' : '+desc.getType(desc.getKey(i)));   
			msg =  msg + "\n" + 'AD '+zeroPad( i+1, 2 )+' = '+IDTz(desc.getKey(i)) +' : '+desc.getType(desc.getKey(i)) ; 
		} 
    return msg; 
	}  
	function IDTz(id){  
		try {  
			var res = typeIDToStringID( id );  
			if(res == '' ){  
				var res = typeIDToCharID( id );  
			}  
		}
		catch(e){}  
		return res;  
	}  
	function zTID( s ){  
		if( s.length == 4 ) var res = charIDToTypeID( s );  
		if( s.length > 4 ) var res = stringIDToTypeID( s );  
		return res;  
	}  
	function zeroPad(num,pad) {  
		var z = Math.pow(10,Number(pad))  
		return num <= z ? ((Number( num) + z).toString().substr(1)): num  
	}  
}; 

//Thanks to r-bin
function obj_to_str(obj){var str = ""; for (var p in obj) if(obj.hasOwnProperty(p))try{str+=p+"::"+obj[p]+"\n";}catch(e){};return str;}  

// Thanks to
function get_layer_by_id(id, doc_id) {    
	try {    
		var doc;  
		if (doc_id == undefined) doc = activeDocument;  
		else { 
			for (var i = 0; i < documents.length; i++) {  
				if (documents[i].id == doc_id) {  
					doc = documents[i];  
					break;  
                }  
            }
		}
		if (doc == undefined) { alert("Bad document " + doc_id); return null; }  
		var r = new ActionReference();      
		r.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("json"));   
		if (doc_id == undefined) r.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));  
		else                     r.putIdentifier(charIDToTypeID("Dcmn"), doc_id);  
		eval("var json = " + executeActionGet(r).getString(stringIDToTypeID("json")));    
		if (json == undefined) return null;    
		var set = new Array();  
		function search_id(layers, id) {    
			for (var i = 0; i < layers.length; i++) {  
				if (layers[i].id == id) { set.push(i); return true; }  
            }  
			for (var i = 0; i < layers.length; i++) {  
				if (layers[i].layers) {    
					if (search_id(layers[i].layers, id)) { set.push(i); return true; }   
				}  
			}  
		}     
		if (search_id(json.layers, id)) {  
			var ret = doc.layers;  
			for (var i = set.length-1; i > 0; i--) { ret = ret[set[i]].layers;}  
			return ret[set[0]];  
		}  
		return null;  
	}    
	catch (e) { alert(e); }    
} 

 

 and this:

 

// 2019, use it at your own risk;

	//Action Manager layerKind seems to be like this. 
 	var Doclayerkind = [
	"Pixel", 
	"Adjustment", 
	"Text",
	"Shape",
	"Smartobject",
	"6",
	"Layerset",
	"3Dlayer",
	"Gradientfill",
	"Patternfill",
	"Colorfill",
	"12",
	"13",
	"14",
	"15",
	"16",
	"17",
	"18",
	"19",
	"20",
	"21",
	"22",
	"23",
	"24"
	]

var theLayers = collectLayers ();
alert("Number of Layers " + theLayers.length + "\n\n" + theLayers.join("\n\n") );

////// collect layers //////
function collectLayers () {
	// the file;
	var myDocument = app.activeDocument;
	// get number of layers;
	var ref = new ActionReference();
	ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
	var applicationDesc = executeActionGet(ref);
	var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
	// process the layers;	
	var theLayers = new Array;
	for (var m = 0; m <= theNumber; m++) {
		try {
			var ref = new ActionReference();
			ref.putIndex( charIDToTypeID( "Lyr " ), m);
			var layerDesc = executeActionGet(ref);
			//alert(actionDescriptor(layerDesc));
			//if (m==1) alert(actionDescriptor(layerDesc));
			var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
			var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
			// if group collect values;
			if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" ) {
			//if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" && isBackground != true) {
				var theName = layerDesc.getString(stringIDToTypeID('name'));
				var theKind = layerDesc.getInteger(stringIDToTypeID('layerKind'));
				var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
				var theBounds = layerDesc.getObjectValue(stringIDToTypeID("bounds"));
				var theseBounds = [theBounds.getUnitDoubleValue(stringIDToTypeID("left")), theBounds.getUnitDoubleValue(stringIDToTypeID("top")), theBounds.getUnitDoubleValue(stringIDToTypeID("right")), theBounds.getUnitDoubleValue(stringIDToTypeID("bottom"))];
				layer = get_layer_by_id(theID);
				var theBlend = layer.blendMode; 
				var theOpacity = layer.opacity; 
				var theVisible = layer.visible; 
				var theType = layer.typename; 	
				var theParent = layer.parent;
				
				if (layer!=null) {theRealkind = layer.kind;}
				else {theRealkind = "";}
				if (theRealkind==undefined) {theRealkind = "LayerKind.UNDEFINED"}	
				// Action Manager layerKnd Shape
				//alert(Doclayerkind[theKind-1]);
				if (Doclayerkind[theKind-1]=="Shape") {
					//alert(actionDescriptor(layerDesc));
					var theFill= layerDesc.getBoolean(stringIDToTypeID("fillEnabled"));
					var theStrokewidth="";
					var theStrokenabled=false; 
					try {					
						var theStrokewidth = layerDesc.getObjectValue(stringIDToTypeID("AGMStrokeStyleInfo")).getUnitDoubleValue(stringIDToTypeID("strokeStyleLineWidth"));
						var theStrokenabled = layerDesc.getObjectValue(stringIDToTypeID("AGMStrokeStyleInfo")).getBoolean(stringIDToTypeID("strokeEnabled"));
					}
					//catch(e) {alert(e + ': on line ' + e.line, 'Script Error', true); }
					catch(e) { }					
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, "stroke " + theStrokewidth + " " + theStrokenabled, "fill " + theFill, theRealkind]);				
				}
				// Action Manager layerKind Adjustments		
				else if (Doclayerkind[theKind-1]=="Adjustment") {
					//alert(actionDescriptor(layerDesc));					
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}
				// Action Manager layerKind Smartobjects			
				else if (Doclayerkind[theKind-1]=="Smartobject") {
					//alert(actionDescriptor(layerDesc));					
					// get Smart Object info
					//alert(obj_to_str(layer));
					/*
					alert(["allLocke " +  layer.allLocked,
					      "\nblendMode " +  layer.blendMode,
					      "\nbound " +  layer.bounds,
					      "\nboundsNoEffect " +  layer.boundsNoEffects,
					      "\nid " +  layer.id,
					      "\nitemIndex " +  layer.itemIndex,					
					      "\nlinkedLayer " +  layer.linkedLayers,						
					      "\nname " +  layer.name,	
					      "\nopacity " +  layer.opacity,	
					      "\nparent " +  layer.parent,	
					      "\ntypename " +  layer.typename,	
					      "\nvisible " +  layer.visible,						
					      "\nxmpMetadata " +  layer.xmpMetadata]);						
					*/
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}	
				// Action Manager layerKind Text					
				else if (Doclayerkind[theKind-1]=="Text") {
					//alert(actionDescriptor(layerDesc));					
					// get text info
					//alert(obj_to_str(layer));
					/*
					alert(["allLocke " +  layer.allLocked,
					      "\nblendMode " +  layer.blendMode,
					      "\nbound " +  layer.bounds,
					      "\nboundsNoEffect " +  layer.boundsNoEffects,
					      "\nid " +  layer.id,
					      "\nitemIndex " +  layer.itemIndex,					
					      "\nlinkedLayer " +  layer.linkedLayers,						
					      "\nname " +  layer.name,	
					      "\nopacity " +  layer.opacity,	
					      "\nparent " +  layer.parent,	
					      "\ntypename " +  layer.typename,	
					      "\nvisible " +  layer.visible,						
					      "\nxmpMetadata " +  layer.xmpMetadata,					
					      "\nkind " + layer.kind,
					      "\ncolor " + layer.textItem.color,
					      "\ntextkind " + layer.textItem.kind, 
					      "\nfont " + layer.textItem.font, 
					      "\nblend " + layer.blendMode, 
					      "\nantiAliasMethod " + layer.textItem.antiAliasMethod,
					      "\nsize " + layer.textItem.size, 
						  "\nposition " + layer.textItem.position,
					      "\ncontents " + layer.textItem.contents, 					  
						  ]);
					*/
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, layer.textItem.font, layer.textItem.size, theRealkind ]);
				}	
				// Action Manager layerKind	Pixel
				// Action Manager layerKind	Layerset
				// Action Manager layerKind	Gradientfill
				// Action Manager layerKind	Patternfill
				// Action Manager layerKind	Colorfill
				// Action Manager layerKind other
				else {
					//alert(theName + "," + Doclayerkind[theKind-1]);
					//alert(actionDescriptor(layerDesc));						
					theLayers.push([theName, "ID " + theID, Doclayerkind[theKind-1], theType, theParent, theBlend, "Opacity " + theOpacity, "Visible " + theVisible, "Bounds " + theseBounds, theRealkind]);
				}
			};
		}
		catch (e) {};
	};
	return theLayers
};


// DOM Layer items
function layerInfo(layer) {
	alert("LayerName='" + layer.name + "'" 
	+ "\nLayerID='" + layer.id  + "'"
	+ "\nLayerKind='" + layer.kind + "'"
	+ "\nallLocked='" + layer.allLocked + "'"
	+ "\nblendMode='" + layer.blendMode + "'"
	+ "\nbounds='" + layer.bounds + "'"
	+ "\nboundsNoEffects='" + layer.boundsNoEffects + "'"
    + "\nitemIndex='" + layer.itemIndex + "'" 
    + "\nlinkedLayers='" + layer.linkedLayers + "'"
	+ "\nopacity='" + layer.opacity + "'"
	+ "\nparent='" + layer.parent + "'"	
	+ "\ntypename='" + layer.typename + "'"	
	+ "\nvisible='" + layer.visible + "'"	
	+ "\nxmpMetadata='" + layer.xmpMetadata + "'"	
	
	);	
}

// Thanks to SuperMerlin
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function actionDescriptor(desc){  
	if(desc.typename == 'ActionDescriptor'){  
		var c = desc.count;  
		var msg= "Action Descriptor Item Count = " + c;
		for(var i=0;i<c;i++){ //enumerate descriptor's keys  
			//$.writeln('AD '+zeroPad( i+1, 2 )+' = '+IDTz(desc.getKey(i)) +' : '+desc.getType(desc.getKey(i)));   
			msg =  msg + "\n" + 'AD '+zeroPad( i+1, 2 )+' = '+IDTz(desc.getKey(i)) +' : '+desc.getType(desc.getKey(i)) ; 
		} 
    return msg; 
	}  
	function IDTz(id){  
		try {  
			var res = typeIDToStringID( id );  
			if(res == '' ){  
				var res = typeIDToCharID( id );  
			}  
		}
		catch(e){}  
		return res;  
	}  
	function zTID( s ){  
		if( s.length == 4 ) var res = charIDToTypeID( s );  
		if( s.length > 4 ) var res = stringIDToTypeID( s );  
		return res;  
	}  
	function zeroPad(num,pad) {  
		var z = Math.pow(10,Number(pad))  
		return num <= z ? ((Number( num) + z).toString().substr(1)): num  
	}  
}; 

//Thanks to r-bin
function obj_to_str(obj){var str = ""; for (var p in obj) if(obj.hasOwnProperty(p))try{str+=p+"::"+obj[p]+"\n";}catch(e){};return str;}  

// Thanks to
function get_layer_by_id(id, doc_id) {    
	try {    
		var doc;  
		if (doc_id == undefined) doc = activeDocument;  
		else { 
			for (var i = 0; i < documents.length; i++) {  
				if (documents[i].id == doc_id) {  
					doc = documents[i];  
					break;  
                }  
            }
		}
		if (doc == undefined) { alert("Bad document " + doc_id); return null; }  
		var r = new ActionReference();      
		r.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("json"));   
		if (doc_id == undefined) r.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));  
		else                     r.putIdentifier(charIDToTypeID("Dcmn"), doc_id);  
		eval("var json = " + executeActionGet(r).getString(stringIDToTypeID("json")));    
		if (json == undefined) return null;    
		var set = new Array();  
		function search_id(layers, id) {    
			for (var i = 0; i < layers.length; i++) {  
				if (layers[i].id == id) { set.push(i); return true; }  
            }  
			for (var i = 0; i < layers.length; i++) {  
				if (layers[i].layers) {    
					if (search_id(layers[i].layers, id)) { set.push(i); return true; }   
				}  
			}  
		}     
		if (search_id(json.layers, id)) {  
			var ret = doc.layers;  
			for (var i = set.length-1; i > 0; i--) { ret = ret[set[i]].layers;}  
			return ret[set[0]];  
		}  
		return null;  
	}    
	catch (e) { alert(e); }    
} 

 

 

JJMack

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Jul 11, 2020 0