Schlagschatten in Photoshop basierend auf der Bildgröße

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.

Warum erstellen Sie nicht die Aktion, um das Bild auf eine festgelegte Größe zu skalieren, und wenden dann den Schlagschatten an?
Ich dachte daran. Aber ich möchte das Original (das archiviert werden soll) nicht verkleinern. Das Konvertieren von allem in ein intelligentes Objekt würde den Prozess erheblich verlängern (ebenso wie das Herunterskalieren).
Wenn Sie Ihre Originaldateien sichern, können Sie tun, was WELZ sagt, und die Originale trotzdem archivieren lassen.
das stimmt, daran hatte ich nicht gedacht :) Wenn ich die richtigen Aktionen einrichte, kann ich das später sogar für einzelne Bilder reproduzieren. Wie auch immer, wäre das nicht eine coole Ergänzung für PS in der Zukunft? ;)

Antworten (2)

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):

Geben Sie hier die Bildbeschreibung ein

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()");
das ist ein toller Ansatz! Ich muss mich mehr mit Skripten beschäftigen! Dies würde tun, was ich will, in jeder Größe. Ich werde es morgen ausprobieren (meine Zeitzone geht bald schlafen) aber markiere es schon als Antwort :)
konnte es kaum erwarten. ;) Das habe ich gesucht. Eindrucksvoll! Als Nebenbemerkung: Dies fügt den Schatten hinzu und ersetzt vorherige (andere) Ebeneneffekte. Das ist in meinem Fall in Ordnung, nur um andere wissen zu lassen. Danke
Ja, diese Methode ersetzt vorhandene Effekte. Es gibt mehrere Möglichkeiten, dieses Verhalten zu vermeiden, am einfachsten ist es wahrscheinlich, zuerst Ebenen zu gruppieren (was je nach Layout und Effekten funktionieren kann oder nicht).

Vielleicht geht man zurück in die alten Zeiten, als das Erstellen eines Schlagschattens kein Ebeneneffekt war.

Bei aktiver Bildauswahl:

Die Aktion:

  • Wählen Sie die Ebene "Hintergrund"
  • Erstellen Sie eine Füllebene > Schwarz, 100 %
  • Aktuelle Ebene transformieren > Verwenden Sie den oberen mittleren Transformationspunkt, um 102 % vertikal und horizontal zu skalieren.
  • Maskenkanal auswählen
  • Gaußscher Weichzeichner > 10px
  • Aktuelle Ebene einstellen > Modus = multiplizieren
  • Aktuelle Ebene einstellen > Deckkraft = 35 %

Der Kreis ist eine 1000 x 1000-Datei

Geben Sie hier die Bildbeschreibung ein

Das Rechteck ist eine 5000 x 600-Datei

Geben Sie hier die Bildbeschreibung ein

Dies unterscheidet sich nicht vom Hinzufügen von Schlagschatten a als Ebenenstil.
Der Unterschied ist die Schattenverschiebung, die nicht in Pixeln, sondern in Prozent der Skalierung der Figur angegeben wird. Die einzige Ein-Pixel-Messung ist die Unschärfe.
Der Autor erwähnte, dass er Shadow Distance verwendet, dieser Ansatz funktioniert leider nur mit einfachen Formen und mit einem Schatten direkt unter der Ebene, denke ich
–dieser Ansatz funktioniert leider nur mit einfachen Formen– Nein, mit beliebiger Auswahl. –Mit einem Schatten direkt unter der Ebene – Nein, über einem Hintergrund :-)
Sie können es sogar in Ihren Beispielen sehen: Auf der 5000x600-Datei erscheint der Schatten viel schärfer.
Folgendes meine ich mit komplexen Formen: Da die Skalierung von der Mitte der Ebene aus wirkt, wird der Schatten nicht vereinheitlicht, wenn die Ebene kein Quadrat oder Kreis ist prntscr.com/kngxd6
@SergeyKritskiy Der dritte Schritt ist genau so, dass die Skalierung nicht aus der Mitte kommt
Entschuldigung, das habe ich nicht verstanden. Dies ändert jedoch nichts an der Tatsache, dass Schatten nicht dasselbe wie Schlagschatten ist und der Effekt in der gegenüberliegenden Ecke stärker ist. prntscr.com/kngzxe Aber das ist ein besonderer Fall. Entschuldigung für die Spitzfindigkeiten, eine schreckliche Angewohnheit
Keine Sorge, ich bin das irgendwie gewohnt. Es ist ein sehr häufiges Verhalten hier.