Ich habe ein intelligentes Objekt in Photoshop CC, das mit der Photoshop-Funktion „Transformieren → Verzerren“ sorgfältig verzerrt wurde. Photoshop verwaltet vermutlich eine Transformationsmatrix für diese Ebene, und ich möchte auf die sechs (?) numerischen Werte dafür zugreifen.
Einige Werte (wie Verschiebung, Skalierung und Drehung) werden in der Transformationsleiste oben auf dem Bildschirm angezeigt, wenn die Ebene transformiert wird, aber leider nicht genug, um eine Matrix zu bilden. Ich habe versucht, über AppleScript auf die Matrixwerte zuzugreifen, aber Photoshop scheint die relevanten Informationen nicht bereitzustellen.
Der Grund, warum ich dies versuche, ist, dass ich die Transformation mithilfe der CSS- transform
Eigenschaft mit der matrix
Funktion neu erstellen kann. Dazu brauche ich vermutlich die Matrix, die Photoshop für die Ebene speichert.
Bearbeiten 1: Wie kann ich alternativ die genauen Koordinaten jeder Ecke des Smart-Objekts erhalten? Ich kann die Transformationsmatrix selbst erstellen, wenn ich diese Koordinaten habe.
Bearbeiten 2: Die Arten von Transformationen, die Photoshop für intelligente Objekte zulässt, bedeuten, dass sie durch eine 3D-Transformationsmatrix dargestellt werden müssen. Wenn Photoshop also intern eine Matrix verwendet, handelt es sich um eine 4x4-Matrix. Ich habe die PSD-Spezifikation durchgesehen, um zu sehen, ob ich die Werte manuell daraus extrahieren oder die Koordinaten der Ecken finden kann, aber ich kann nicht sehen, wo sie gespeichert sind. Ich vermute, dass ich am besten die Koordinaten der Ecken finde und die Matrix selbst erzeuge; Ich habe es beobachtet und es funktioniert relativ gut, aber es wäre schön, die genauen Koordinaten zu haben.
Bearbeiten 3: Falls dies jemandem hilft, habe ich gerade bemerkt, dass Hilfslinien an den Ecken einrasten, wenn Sie sie vom Lineal ziehen, wenn sich das intelligente Objekt im Transformationsmodus befindet (Bearbeiten → Freie Transformation), und ihre Position anzeigen. Leider scheinen sie nur in 0,1-Pixel-Schritten einzurasten, obwohl es so aussieht, als könnten die Ecken feiner gesteuert werden, aber zumindest ist es schneller (und etwas genauer) als nur zu raten.
Normale Ebenen Photoshop verwaltet keine Transformationsmatrizen. Sobald Sie die Transformation auf die Ebene übertragen haben, wird sie gerastert und angewendet. Gleiches scheint für Formebenen zu gelten. Es gibt also im Normalfall einfach nichts zu erholen.
Intelligente Objekte und Text haben diese Informationen. Diese Informationen sind in der Skript-API nicht leicht verfügbar. Es ist im SDK als 3x3-Matrix verfügbar, aber das ist ziemlich hardcore. So erhalten Sie die obere Zwei-mal-Zwei-Matrix. Benutzte diesen Stack-Overflow-Post von psycho brm post als Leitfaden. Es funktioniert im Moment nur für Textebenen (und die Ebene muss eine Rotationsskalierung oder Neigung haben).
#target photoshop
var doc = app.activeDocument;
alert(getTransformMatrix2by2())
function getTransformMatrix2by2()
{
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID('textKey'));
if (desc.hasKey(stringIDToTypeID('transform')))
{
var matrix = [['xx','xy'],['yx','yy']];
desc = desc.getObjectValue(stringIDToTypeID('transform'));
for (var i=0;i < matrix.length;i++){
var row = matrix[i];
for (var j=0;j < row.length;j++){
matrix[i][j] = desc.getDouble(stringIDToTypeID(matrix[i][j]));
}
}
return matrix;
}
return undefined;
}
Jetzt solltest du das zerlegen können.
Bearbeiten : Anscheinend sind die Übersetzungen IDs 720-721 oder Namen tx
und ty
aber ich bekomme immer 0 für sie.
hsadrähte
Robert