Ich habe es mit vielen tausend PSD-Dateien zu tun, die Produktbilder enthalten. Die meisten Elemente wurden von ihrem ursprünglichen Hintergrund getrennt und auf Weiß platziert. Sie haben einen sehr leichten Schlagschatten, um sie etwas vom Hintergrund abzuheben. Jetzt überarbeite ich sie alle (ursprünglich quadratische Bilder, aber 4:3 erforderlich) und möchte ihnen allen den exakt gleichen Schatten geben (hauptsächlich durch aufgezeichnete Aktionen). Ich habe den Schatten in einer Aktion aufgenommen (Ausbreitung von X px, Abstand von X px etc).
Das Problem wird nun, dass Bildabmessungen von etwa 1000 bis sogar 5000 px reichen. Und wenn ich denselben Schatten anwende, sieht es in einem kleineren Bild ganz anders aus als in einem größeren.
Was ich suche, ist eine Möglichkeit, Schatten nicht mit PIXEL-Abstand, Ausbreitung usw., sondern mit PERCENT-Abstand usw. zu erzeugen. Auf diese Weise hoffe ich, in allen Bildern denselben SCHEINBAREN Schatten zu erzielen. Ich arbeite seit vielen Jahren mit PS und habe online gesucht, bin aber nie auf so etwas gestoßen.
Gibt es eine Möglichkeit, dies zu erreichen? Jede Hilfe wäre willkommen.
Hier ist, wie ich das mit Scripting angehen würde. Zuerst definiere ich den Referenzschatten und die Referenzgröße. Wenn die Bildbreite dann nicht mit der Referenzgröße übereinstimmt, transformiere ich die Schattenwerte basierend auf dem Verhältnis der aktuellen Bildbreite und der Referenzbreite linear.
Ergebnis (erstes Bild ist Referenz, 1000 x 1000, zweites ist 2000 x 2000, drittes ist 660 x 600, viertes ist 200 x 200):
Da Photoshop keine Dezimalstellen im Schatteneffekt unterstützt, sind die Ergebnisse dazwischen nicht genau gleich, aber nahe genug.
Sie können dieses Skript also als einen der Aktionsschritte hinzufügen:
function main()
{
var myShadow = {
color:
{
r: 0,
g: 0,
b: 0,
},
opacity: 80,
angle: 120,
distance: 10,
spread: 0,
size: 20,
},
referenceSize = 1000,
doc = activeDocument,
w = doc.width.as("px"),
h = doc.height.as("px");
if (w != referenceSize)
{
var ratio = w/referenceSize;
myShadow.distance = linear(ratio,0,1,0,myShadow.distance);
myShadow.spread = linear(ratio,0,1,0,myShadow.spread);
myShadow.size = linear(ratio,0,1,0,myShadow.size);
}
dropShadow(myShadow);
/////////////////////////////////////////////////////////////////////////////////////
function dropShadow(shadow)
{
var desc10 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putProperty(cTID('Prpr'), cTID('Lefx'));
ref1.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Trgt'));
desc10.putReference(cTID('null'), ref1);
var desc11 = new ActionDescriptor();
desc11.putUnitDouble(cTID('Scl '), cTID('#Prc'), 100);
var desc12 = new ActionDescriptor();
desc12.putBoolean(cTID('enab'), true);
desc12.putBoolean(sTID('present'), true);
desc12.putBoolean(sTID('showInDialog'), true);
desc12.putEnumerated(cTID('Md '), cTID('BlnM'), cTID('Nrml'));
var desc13 = new ActionDescriptor();
desc13.putDouble(cTID('Rd '), shadow.color.r);
desc13.putDouble(cTID('Grn '), shadow.color.g);
desc13.putDouble(cTID('Bl '), shadow.color.b);
desc12.putObject(cTID('Clr '), cTID('RGBC'), desc13);
desc12.putUnitDouble(cTID('Opct'), cTID('#Prc'), shadow.opacity);
desc12.putBoolean(cTID('uglg'), false);
desc12.putUnitDouble(cTID('lagl'), cTID('#Ang'), shadow.angle);
desc12.putUnitDouble(cTID('Dstn'), cTID('#Pxl'), shadow.distance);
desc12.putUnitDouble(cTID('Ckmt'), cTID('#Pxl'), shadow.spread);
desc12.putUnitDouble(cTID('blur'), cTID('#Pxl'), shadow.size);
desc12.putUnitDouble(cTID('Nose'), cTID('#Prc'), 0.000000);
desc12.putBoolean(cTID('AntA'), false);
var desc14 = new ActionDescriptor();
desc14.putString(cTID('Nm '), "Linear");
desc12.putObject(cTID('TrnS'), cTID('ShpC'), desc14);
desc12.putBoolean(sTID('layerConceals'), true);
desc11.putObject(cTID('DrSh'), cTID('DrSh'), desc12);
desc10.putObject(cTID('T '), cTID('Lefx'), desc11);
executeAction(cTID('setd'), desc10, DialogModes.NO);
};
function linear(X, A, B, C, D, _cut)
{
var _cut = _cut !== undefined ? _cut : false;
var Y = (X - A) / (B - A) * (D - C) + C
if (_cut)
{
Y > D && Y = D;
Y < C && Y = C;
};
return Y
};
function cTID(s)
{
return app.charIDToTypeID(s);
};
function sTID(s)
{
return app.stringIDToTypeID(s);
};
}
app.activeDocument.suspendHistory("addShadow", "main()");
Vielleicht geht man zurück in die alten Zeiten, als das Erstellen eines Schlagschattens kein Ebeneneffekt war.
Bei aktiver Bildauswahl:
Die Aktion:
Der Kreis ist eine 1000 x 1000-Datei
Das Rechteck ist eine 5000 x 600-Datei
Welz
Englisch
Elektron
Englisch