Antworten auf deine Fragen:
Neues Thema erstellen

[CS4] - Rahmen wie bei Instagram (automatisiert) erstellen

Schorschinio

Nicht mehr ganz neu hier

Hallo Zusammen,

ich möchte ein paar Bilder in einer Collage zusammenfassen und hierzu einen dezenten weißen oder Cremefarbenen Rahmen um das Bild setzen.
Grundsätzlich funktioniert das ja sehr einfach und gut mit "Bild->Arbeitsfläche" in dem man zuvor die richtige Hintergrundfarbe setzt einfach die Arbeitsfläche erweitert.

Nun hätte ich aber bei manchen Bildern gerne einen auf der innenseite (Bildseite) abgerundeten Rahmen. Das ganze könnte ich ja erreichen indem ich ein abgerundetes Rechteck aufziehe über Pfade eine Auswahl erstelle und das umkehre + mit Farbe fülle.
Vom Ergebnis sehr gut :) Aber immer ein manueller Schritt und somit je nach Bild wieder unterschiedlich.
Daher die Frage wie könnte ich sowas automatisieren das die Bilder nachher vom Rahmen her gleich werden - unabhängig ob Quer, Hoch oder Quadratisches Format. Evtl. gibt es hierzu auch schon Aktionen!?

Wahrscheinlich ist es ganz einfach was ich suche und ich stehe gerade nur auf dem Schlauch - ich hoffe Ihr könnt mir helfen. Schon mal VIELEN DANK! :)
 

Photoshop

SimoneHinz

Nicht mehr ganz neu hier

Dazu müssten die Foto die gleiche Größe haben oder sie müssten automatisch auf eine einheitliche Größe gebracht werden. Dann gebe es keine Probleme dein Vorhaben umzusetzen.

LG Simone
 

Schorschinio

Nicht mehr ganz neu hier

Hallo Simone,

Danke für die Antwort. Ja genau das ist das Problem das die nicht immer das gleiche Format/die gleiche Größe haben.

Zur Not kann ich auf mit dem "eckigen" Rand leben - sieht ja auch gut aus. ;)
 

Andre_S

unverblümt

Ich meine die 8er weil das eine uneingeschränkte Premium Version ist. Alleine wegen "Dynamischer Kontrast" ist das ein Top Filter.
Bei Nik der "Tonal Contrast" wird nach Helligkeitsbereichen gesteuert. Bei Topaz "Clarity" gehts um Micro- bis Macrokontraste (Größe).
Dynamische Kontraste bietet beides und den gibt es glaube ich nur bei der Premium.
 

ph_o_e_n_ix

acromyniker

Nun hätte ich aber bei manchen Bildern gerne einen auf der innenseite (Bildseite) abgerundeten Rahmen. Das ganze könnte ich ja erreichen indem ich ein abgerundetes Rechteck aufziehe über Pfade eine Auswahl erstelle und das umkehre + mit Farbe fülle.
Vom Ergebnis sehr gut :) Aber immer ein manueller Schritt und somit je nach Bild wieder unterschiedlich.
Wenn du vor dem aufziehen deines abgerundeten Rechtecks die Einheit deines Lineals auf Prozent stellst, sollte es unabhängig von der Orientierung (Landscape/Portrait) und der Bildgröße funktionieren.

Wenn du dann noch beim erweitern der Arbeitsfläche die Option "relativ" verwendest und die Breite/Höhe jeweils um x Pixel erweiterst, müsstest du genau das haben, was du wolltest.

Hier mal eine verbesserungswürdige Aktion zum testen...

> Rahmen
 

Andre_S

unverblümt

Wenn du vor dem aufziehen deines abgerundeten Rechtecks die Einheit deines Lineals auf Prozent stellst, sollte es unabhängig von der Orientierung (Landscape/Portrait) und der Bildgröße funktionieren.
Aktion mal getestet :daumenhoch
Mit einer abgerundeten Rechteckform die man dann auf "vordere Form subrahieren" setzt gehts noch schneller (vorher alle Ankerpunkte markieren).
 
Zuletzt bearbeitet:

ph_o_e_n_ix

acromyniker

Da sich das Thema erledigt zu haben scheint, lohnt es sich auch nicht weiter, mein angefangenes Skript weiterzuentwickeln...

Wer mit Fehlern/Einschränkungen leben kann, darf gerne das folgende Skript verwenden...

roundedframe8vufo.png


Download: Rounded Frame Script
 
Zuletzt bearbeitet:

moizi

Nicht mehr ganz neu hier

Vielen Dank für den Tipp mit dem Perfekt Effekt 8 Plugin!

Ich hatte auch schon nach einer Möglichkeit, um Bilder im Instagram-Stil auf Photoshop zu gestalten gesucht, und werde das gleich einmal ausprobieren.
 

Schorschinio

Nicht mehr ganz neu hier

Vielen Dank an alle für die Hilfe - Musste "Zeit-technisch" leider das Thema pausieren, werde das Thema die Tage wieder angehen können. :)
 

Schorschinio

Nicht mehr ganz neu hier

Da sich das Thema erledigt zu haben scheint, lohnt es sich auch nicht weiter, mein angefangenes Skript weiterzuentwickeln...

Wer mit Fehlern/Einschränkungen leben kann, darf gerne das folgende Skript verwenden...

roundedframe8vufo.png


Download: Rounded Frame Script
Funktioniert SUPER! VIELEN DANK!!! Was hattest Du evtl. zur Weiterentwicklung auf dem Plan?
Kann man die Rahmen auch als Ebene drüberlegen, so das der Hintergrund das unangerührte Bild bleibt? Wäre aber nicht wirlich wild/wichtig - nur als Frage am Rand.
 

ph_o_e_n_ix

acromyniker

Was hattest Du evtl. zur Weiterentwicklung auf dem Plan?
Das Skript hat noch diverse Mängel (es gibt keine Abfrage des Farbmodis, eine geschützte Hintergrund-Ebene ist aktuell auch zwingend notwendig, etc.), die man hätte beseitigen können. Ebenso wäre eine nette GUI denkbar gewesen, in der man Quell- und Zielordner oder die Rahmenfarbe individuell hätte festlegen können, das laden/speichern eigener Vorgaben oder die Unterstützung gängiger Dateiformate und/oder die Möglichkeit, die Dateien entsprechende umzubenennen. Denkbar wäre vieles gewesen - nur sollte man deren Notwendigkeit vorher kennen - sonst macht man sich nur unnötige Arbeit. Eine Überarbeitung hat sich aber ohnehin erledigt, weil ich den unverschlüsselten Programmcode ohnehin nicht mehr habe (ist einer kleinen Aufräumaktion zum Opfer gefallen)
Kann man die Rahmen auch als Ebene drüberlegen, so das der Hintergrund das unangerührte Bild bleibt?
Wäre an sich kein Problem gewesen...
 

Schorschinio

Nicht mehr ganz neu hier

@ph_o_e_n_ix
Danke für Dein schnelles Feedback.
Ich bin leider die letzten Wochen/sogar Monate nicht wirklich zu dem Thema gekommen, dann musste noch der PC gewechselt werden. Somit Pech für mich das ich zu spät Feedback gegeben habe - dennoch hilft mir das Skript schon hier und da weiter.
Daher Vielen Dank nochmals!
 
… weil ich den unverschlüsselten Programmcode ohnehin nicht mehr habe …
Yup,
und deshalb stelle ich solche netten kleinen Skriptschnipselchen auch gerne unverschlüsselt on. Auch wenn man ab und zu Disskussionen über „unsauberen Code“ über sich ergehen lassen muss. Aber da sollte man drüberstehen – man kann nur dazulernen.
;)

Der positive Nebeneffekt: oft entwickeln sich die Schnipselchen im gleichen Thread dann wie von Geisterhand weiter.
 

ph_o_e_n_ix

acromyniker

An einem sauber programmierter Code soll es nicht mangeln - da bei vielen Anfragen aber oftmals ein kommerzieller Nutzen dahinter steckt (in diesem Fall wohl eher nicht), wird man es mir nachsehen, wenn ich nicht Unmengen an Zeit in eine nette GUI und alle nur (un)denkbaren Eventualitäten für ein "Danke" investiere. Wer das wirklich möchte (und auch den Quellcode), der kann sich ja gerne mit mir in Verbindung setzen oder ein Jobangebot posten.

Bisher ist meine Erfahrung allerdings die, dass das was man grob zusammengezimmert hat (und mag es noch so von Fehlern/Unzulänglichkeiten strotzen), spätestens dann völlig ausreichend ist, wenn man für die Beseitigung der Fehler und eine Funktionserweiterung ein paar Euro haben möchte.
 
???
Da sind wir grad ein bisschen verschiedener Meinung.

Für solche Kleinigkeiten reicht ein ausgelesener AM-Code vollkommen aus. Und ob der narrensicher ist oder nicht, das ist eher egal. Und einen solchen Code kann man problemlos veröffentlichen.
Hier einmal voll funktionsfähig mit transparentem Rahmen (sind knapp 100 Zeilen, da ohne jegliche manuelle Nachbearbeitung):
Javascript:
var idsetd = charIDToTypeID( "setd" );
    var desc1 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref1 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idBckg = charIDToTypeID( "Bckg" );
        ref1.putProperty( idLyr, idBckg );
    desc1.putReference( idnull, ref1 );
    var idT = charIDToTypeID( "T   " );
        var desc2 = new ActionDescriptor();
        var idOpct = charIDToTypeID( "Opct" );
        var idPrc = charIDToTypeID( "#Prc" );
        desc2.putUnitDouble( idOpct, idPrc, 100.000000 );
        var idMd = charIDToTypeID( "Md  " );
        var idBlnM = charIDToTypeID( "BlnM" );
        var idNrml = charIDToTypeID( "Nrml" );
        desc2.putEnumerated( idMd, idBlnM, idNrml );
    var idLyr = charIDToTypeID( "Lyr " );
    desc1.putObject( idT, idLyr, desc2 );
executeAction( idsetd, desc1, DialogModes.NO );
var idsetd = charIDToTypeID( "setd" );
    var desc3 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref2 = new ActionReference();
        var idPath = charIDToTypeID( "Path" );
        var idWrPt = charIDToTypeID( "WrPt" );
        ref2.putProperty( idPath, idWrPt );
    desc3.putReference( idnull, ref2 );
    var idT = charIDToTypeID( "T   " );
        var desc4 = new ActionDescriptor();
        var idTop = charIDToTypeID( "Top " );
        var idPrc = charIDToTypeID( "#Prc" );
        desc4.putUnitDouble( idTop, idPrc, 0.000000 );
        var idLeft = charIDToTypeID( "Left" );
        var idPrc = charIDToTypeID( "#Prc" );
        desc4.putUnitDouble( idLeft, idPrc, 0.000000 );
        var idBtom = charIDToTypeID( "Btom" );
        var idPrc = charIDToTypeID( "#Prc" );
        desc4.putUnitDouble( idBtom, idPrc, 100.000000 );
        var idRght = charIDToTypeID( "Rght" );
        var idPrc = charIDToTypeID( "#Prc" );
        desc4.putUnitDouble( idRght, idPrc, 100.000000 );
        var idRds = charIDToTypeID( "Rds " );
        var idPxl = charIDToTypeID( "#Pxl" );
        desc4.putUnitDouble( idRds, idPxl, 30.000000 );
    var idRctn = charIDToTypeID( "Rctn" );
    desc3.putObject( idT, idRctn, desc4 );
executeAction( idsetd, desc3, DialogModes.NO );
var idCnvS = charIDToTypeID( "CnvS" );
    var desc5 = new ActionDescriptor();
    var idRltv = charIDToTypeID( "Rltv" );
    desc5.putBoolean( idRltv, true );
    var idWdth = charIDToTypeID( "Wdth" );
    var idPxl = charIDToTypeID( "#Pxl" );
    desc5.putUnitDouble( idWdth, idPxl, 40.000000 );
    var idHght = charIDToTypeID( "Hght" );
    var idPxl = charIDToTypeID( "#Pxl" );
    desc5.putUnitDouble( idHght, idPxl, 40.000000 );
    var idHrzn = charIDToTypeID( "Hrzn" );
    var idHrzL = charIDToTypeID( "HrzL" );
    var idCntr = charIDToTypeID( "Cntr" );
    desc5.putEnumerated( idHrzn, idHrzL, idCntr );
    var idVrtc = charIDToTypeID( "Vrtc" );
    var idVrtL = charIDToTypeID( "VrtL" );
    var idCntr = charIDToTypeID( "Cntr" );
    desc5.putEnumerated( idVrtc, idVrtL, idCntr );
executeAction( idCnvS, desc5, DialogModes.NO );
var idsetd = charIDToTypeID( "setd" );
    var desc6 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref3 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idfsel = charIDToTypeID( "fsel" );
        ref3.putProperty( idChnl, idfsel );
    desc6.putReference( idnull, ref3 );
    var idT = charIDToTypeID( "T   " );
        var ref4 = new ActionReference();
        var idPath = charIDToTypeID( "Path" );
        var idWrPt = charIDToTypeID( "WrPt" );
        ref4.putProperty( idPath, idWrPt );
    desc6.putReference( idT, ref4 );
    var idVrsn = charIDToTypeID( "Vrsn" );
    desc6.putInteger( idVrsn, 1 );
    var idvectorMaskParams = stringIDToTypeID( "vectorMaskParams" );
    desc6.putBoolean( idvectorMaskParams, true );
executeAction( idsetd, desc6, DialogModes.NO );
var idInvs = charIDToTypeID( "Invs" );
executeAction( idInvs, undefined, DialogModes.NO );
var idDlt = charIDToTypeID( "Dlt " );
    var desc7 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref5 = new ActionReference();
        var idPath = charIDToTypeID( "Path" );
        var idWrPt = charIDToTypeID( "WrPt" );
        ref5.putProperty( idPath, idWrPt );
    desc7.putReference( idnull, ref5 );
executeAction( idDlt, desc7, DialogModes.NO );
var idcut = charIDToTypeID( "cut " );
executeAction( idcut, undefined, DialogModes.NO );

Und falls man das Ganze als ExtendScript - Javascript - AM-Code - Mix erstellt, dann reichen zusammengefasst schon mal 20 Zeilen (wenn man die Kommentarzeilen aussen vorlässt). und wer will (und kann), der darf sich gerne selbst noch ein paar sinnvolle Routinen zum Fehlerabfangen einbauen:
Javascript:
// RoundedFrame2.jsx
// http://www.psd-tutorials.de/forum/threads/rahmen-wie-bei-instagram-automatisiert-erstellen.166291/
// erstellt abgerundete (transparente) Rahmen
// regards pixxxelschubser
var aDoc = app.activeDocument; app.preferences.rulerUnits = Units.PIXELS;
var aLay = aDoc.activeLayer; aLay.isBackgroundLayer = false;
var abst = Number(prompt("Rahmenbreite in Pixeln festlegen:", 40, "Rahmenbreite"));
var rad = Number(prompt("Radius in Pixeln festlegen:", 30, "Rahmenbreite"));
var totalH = aDoc.height.as("PIXELS"), totalW = aDoc.width.as("PIXELS");
var desc0 = new ActionDescriptor();
var ref = new ActionReference(); ref.putProperty( charIDToTypeID( "Path" ), charIDToTypeID( "WrPt" ));
desc0.putReference( charIDToTypeID( "null" ), ref);
var desc1 = new ActionDescriptor()
var idPrc = charIDToTypeID( "#Prc");
desc1.putUnitDouble( charIDToTypeID( "Top " ), idPrc, 0.000000);
desc1.putUnitDouble( charIDToTypeID( "Left" ), idPrc, 0.000000);
desc1.putUnitDouble( charIDToTypeID( "Btom" ), idPrc, 100.000000);
desc1.putUnitDouble( charIDToTypeID( "Rght" ), idPrc, 100.000000);
desc1.putUnitDouble( charIDToTypeID( "Rds " ), charIDToTypeID( "#Pxl" ), rad);
desc0.putObject( charIDToTypeID( "T   " ), charIDToTypeID( "Rctn" ), desc1);
executeAction( charIDToTypeID( "setd" ), desc0, DialogModes.NO);
aDoc.resizeCanvas (totalW+abst, totalH+abst);
var aPath = aDoc.pathItems[aDoc.pathItems.length-1]; aPath.makeSelection(0, true, SelectionType.REPLACE); aPath.remove();
var sel = aDoc.selection; sel.invert(); aDoc.selection.cut();

Wie auch immer, mit solchen kleinen Spielereien (wie dieser) kann man als Coder kein Geld verdienen. (Die Forumeigner hingegen schon)
Viel Spass noch
;)
 

ph_o_e_n_ix

acromyniker

Ich sehe das anders - der der sich die Lösung ohnehin nicht erarbeiten kann, dem ist es meist relativ egal, wie er zur Lösung kommt.

Und dabei ist es völlig egal, ob der Quellcode nun einsehbar ist oder nicht.

Im konkreten Fall glaube ich kaum, dass sich der TE die Mühe macht, an Hand des Quellcodes herauszufinden, wie er Rahmenbreite oder den Radius verändern kann - ist ja auch keine wirklich praktische Lösung, wenn die betreffenden Stellen nicht auskommentiert sind.

Das nächste Problem sehe ich auch im verwendeten Code-Tag ... kopiert man den Code unter FF, wird auch nur der Quellcode kopiert - nutzt man hingegen den IE, wird auch die Zeilennummerierung mit kopiert (auch wenn die bei der Auswahl augenscheinlich unberücksichtigt bleibt). Und hinterher wundern sich die User wieder, wieso es ausgerechnet bei ihnen zu Fehlermeldungen kommt.

Da biete ich Skripte doch lieber zum einfachen DL an, statt Usern irgendwelche Copy'n'Paste-Aktionen aufzuzwingen...

PS:
 
… Im konkreten Fall glaube ich kaum, dass sich der TE die Mühe macht, an Hand des Quellcodes herauszufinden, wie er Rahmenbreite oder den Radius verändern kann - ist ja auch keine wirklich praktische Lösung, wenn die betreffenden Stellen nicht auskommentiert sind …

:confused::confused::confused:
Jetzt bin ich verwirrt.
:confused::confused::confused:

Das zweite Skript (also !nicht! der reine AM-Code) ist genau analog zum deinem aufgebaut (außer eben, dass der Rahmen transparent bleibt), d.h. es gibt zwei Eingabefelder für Rahmenbreite und Eckenradius. Aus diesem Grund muss man also gewiß nicht im Quellcode wühlen.

Frage: Hast du das zweite Skript einmal getestet?

Und es geht ja auch nicht ums „Wühlen“.
Ich selbst beschäftige mich seit vielen Jahren mit Automatisierungslösungen für AI, PS und ID. Eventuell könnte dir das eine oder andere Mitglied hier im Forum bessere und/oder schnelle und damit effektivere Teillösungen mit auf den Weg geben. Vielleicht würde ich mir auch beim Ansehen deines Codes sagen, mann-o-mann – das ist ja genial, ich habe das in der Vergangenheit immer viel umständlicher gehandhabt.

Ich biete gerne kleinere Lösungen an, weil Forum Geben und Nehmen ist. Im Synergieeffekt kann ich bei Antworten von anderen mit ähnlichem Wissensstand nur dazulernen (auch wenn das leider bei dieser speziellen Thematik sehr sehr selten der Fall war bzw. sein wird.)

Solche Skriptschnipsel zeigen den Weg auf und helfen dem/der TO auch schon in den allermeisten Fällen ausreichend weiter. Man selbst bleibt in der Übung und ab und zu lernt man (gerade bei Programm-Versionswechseln) noch dazu …

… und gelegentlich hat sich auch schon der eine oder andere Auftrag aus solchen „Kleinigkeiten“ ergeben.

---------------------------------------------------

… nutzt man hingegen den IE, wird auch die Zeilennummerierung mit kopiert (auch wenn die bei der Auswahl augenscheinlich unberücksichtigt bleibt) …
Das wäre sicherlich einen Bug-Report in einem eigenständigen Thema etwa unter:
http://www.psd-tutorials.de/forum/forums/fragen-fehler-kritik-anregungen-fuer-psd.14/
wert.

Ich persönlich nutze den IE nicht für PSD-Tutorials. Viel zu langsam (zumindest meine Uralt-IE-Version)
 

mm100

Benutzer

Und falls man das Ganze als ExtendScript - Javascript - AM-Code - Mix erstellt, dann reichen zusammengefasst schon mal 20 Zeilen (wenn man die Kommentarzeilen aussen vorlässt). und wer will (und kann), der darf sich gerne selbst noch ein paar sinnvolle Routinen zum Fehlerabfangen einbauen:
Javascript:
// RoundedFrame2.jsx
// http://www.psd-tutorials.de/forum/threads/rahmen-wie-bei-instagram-automatisiert-erstellen.166291/
// erstellt abgerundete (transparente) Rahmen
// regards pixxxelschubser
var aDoc = app.activeDocument; app.preferences.rulerUnits = Units.PIXELS;
var aLay = aDoc.activeLayer; aLay.isBackgroundLayer = false;
var abst = Number(prompt("Rahmenbreite in Pixeln festlegen:", 40, "Rahmenbreite"));
var rad = Number(prompt("Radius in Pixeln festlegen:", 30, "Rahmenbreite"));
var totalH = aDoc.height.as("PIXELS"), totalW = aDoc.width.as("PIXELS");
var desc0 = new ActionDescriptor();
var ref = new ActionReference(); ref.putProperty( charIDToTypeID( "Path" ), charIDToTypeID( "WrPt" ));
desc0.putReference( charIDToTypeID( "null" ), ref);
var desc1 = new ActionDescriptor()
var idPrc = charIDToTypeID( "#Prc");
desc1.putUnitDouble( charIDToTypeID( "Top " ), idPrc, 0.000000);
desc1.putUnitDouble( charIDToTypeID( "Left" ), idPrc, 0.000000);
desc1.putUnitDouble( charIDToTypeID( "Btom" ), idPrc, 100.000000);
desc1.putUnitDouble( charIDToTypeID( "Rght" ), idPrc, 100.000000);
desc1.putUnitDouble( charIDToTypeID( "Rds " ), charIDToTypeID( "#Pxl" ), rad);
desc0.putObject( charIDToTypeID( "T   " ), charIDToTypeID( "Rctn" ), desc1);
executeAction( charIDToTypeID( "setd" ), desc0, DialogModes.NO);
aDoc.resizeCanvas (totalW+abst, totalH+abst);
var aPath = aDoc.pathItems[aDoc.pathItems.length-1]; aPath.makeSelection(0, true, SelectionType.REPLACE); aPath.remove();
var sel = aDoc.selection; sel.invert(); aDoc.selection.cut();

Viel Spass noch
;)

Also ich finde das absolute Oberklasse.
Vielen Dank, funktioniert spitzenmässig.

Für mich auf jeden Fall die beste Antwort.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben