2017-09-19 1 views
1

Ziel:Photoshop-Ebene x/y-Center Registrierung Punktkoordinaten

Entwerfen Sie ein Skript, das ich innerhalb von Photoshop laufen kann, die mir zur Verfügung stellen die x- und y-Koordinaten jeder Schicht in der PSD-Datei, und dann Speichern Sie das in einer Textdatei, die ich zum Extrahieren der Daten verwenden kann.

Fortschritt:

Ich habe bereits festgestellt, ein Skript, das dies zu erreichen, und machte meine eigenen Ergänzungen zu.

Ausgabe:

Mein Problem ist, dass ich nicht ein sehr fortschrittliches Coder bin, Ich versuche, die x- und y-Koordinaten des Mittelregistrierungspunkt der Schicht zu bekommen, nicht links oben. Ich habe stundenlang geforscht (vielleicht habe ich Google nicht die richtigen Fragen gestellt), um das herauszufinden. Ich weiß, dass mein Verständnis nicht mit den tatsächlichen Softwareentwicklern übereinstimmt, und obwohl ich das respektiere, gibt es keinen Entwickler, der hier arbeitet, und ich bin irgendwie allein gelassen, um das herauszufinden. Ich habe ein wenig Javascript studiert, also habe ich genug verstanden, um kleine Ergänzungen zum folgenden Code zu machen.

Der Code:

// Bring application forward 
app.bringToFront(); 

// Set active Document variable and decode name for output 
var docRef = app.activeDocument; 
var docName = decodeURI(activeDocument.name); 

// Define pixels as unit of measurement 
var defaultRulerUnits = preferences.rulerUnits; 
preferences.rulerUnits = Units.PIXELS; 

// Define variable for the number of layers in the active document 
var layerNum = app.activeDocument.artLayers.length; 


// Define variable for the active layer in the active document 
var layerRef = app.activeDocument.activeLayer; 


// Define varibles for x and y of layers 
var x = layerRef.bounds[0].value; 
var y = layerRef.bounds[1].value; 
var coords = ""; 

// Loop to iterate through all layers 

function recurseLayers(currLayers) { 
    for (var i = 0; i < currLayers.layers.length; i++) { 
    layerRef = currLayers.layers[i]; 
    x = layerRef.bounds[0].value; 
    y = layerRef.bounds[1].value; 
    coords += layerRef.name + ": " + x + "x" + "," + y + "y" + "\n"; 

//test if it's a layer set 

    if (isLayerSet(currLayers.layers[i])) { 
     recurseLayers(currLayers.layers[i]); 
    } 
    } 
} 

//a test for a layer set 

function isLayerSet(layer) { 
    try { 
    if (layer.layers.length > 0) { 
     return true; 
    } 
    } 

    catch(err) { 
    return false; 
    } 
} 

// Ask the user for the folder to export to 

var FPath = Folder.selectDialog("Save exported coordinates to"); 

// Detect line feed type 

if ($.os.search(/windows/i) !== -1) { 
    fileLineFeed = "Windows"; 
} 
else { 
    fileLineFeed = "Macintosh"; 
} 

// Export to txt file 

function writeFile(info) { 
    try { 
    var f = new File(FPath + "/" + docName + ".txt"); 
    f.remove(); 
    f.open('a'); 
    f.lineFeed = fileLineFeed; 
    f.write(info); 
    f.close(); 
    } 
    catch(e){} 
} 

// Run the functions 

recurseLayers(docRef); 
preferences.rulerUnits = defaultRulerUnits; 

// Set preferences back to user's defaults 

writeFile(coords); 

// Show results 

if (FPath == null) { 
    alert("Export aborted", "Canceled"); 
} 
else { 
    alert("Exported " + layerNum + " layer's coordinates to " + FPath + "/" + 
docName + ".txt " + "using " + fileLineFeed + " line feeds.", "Success!"); 
} 
+0

Die Lösung Ich suche bin, ist das Zentrum einer Schicht zu finden Feld (oder Bildbegrenzungsrahmen) in Form von x und y-Koordinaten begrenzt, dass Sie normalerweise manuell durch Kopieren und Einfügen aus photoshops Symbolleiste erhalten müssen. – Mike

Antwort

1

Die bounds Eigenschaft einer Schicht gibt Ihnen die linke obere Ecke. Der Mittelpunkt ist x + die halbe Schichtbreite und y + die halbe Schichthöhe. Alles, was Sie brauchen, sind die Schichtdimensionen und etwas Mathe.

+0

Danke für Ihre Hilfe, ich wollte darauf zurückkommen. Ich konnte es mit dieser Art von Informationen arbeiten. Vielen Dank – Mike

Verwandte Themen