• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs Juli 2025.
    Thema: "Unscharf"

    Nur noch bis zum 31.07.2025 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

CS3: Transformiertes Smart Object zurücksetzen?

Also per Aktion geht es erstmal :top:

Nebenwirkungen sind:
  • es wird eine Datei abgespeichert
  • diese Datei muß man selbst löschen oder sie bleibt halt z.B. im Temp-Ordner oder wo auch immer
  • wenn die Datei bereits existiert poppt der Speicherdialog auf


Die Aktion läuft wie folgt ab, wobei das SO schon die aktive Ebene ist:
  • Ebene:Smart Objecte:Inhalte exportieren...
  • die SmartObject-Ebene löschen
  • eine neue leere Ebene erstellen
  • diese in ein SmartObject umwandeln
  • Ebene:Smart Objecte:Inhalte ersetzen...


Das ganze geht sicherlich (hoffe ich) auch per Script wobei man dann auch die Tmp-Datei löschen könnte - Aber nicht mehr heute ... eventuell reicht ja schon die Aktion.
 
Danke Mariane für deine hilfsbereite Beharrlichkeit. :) Das wäre sicher eine Möglichkeit. Nur, ob ich dann eine Aktion an einer Stelle pausiere, um dort das neue Smartobject in die alte Datei zu ziehen oder ob ich nochmal kurz z.B. auf den Desktop und die Temp-Datei löschen muss, nimmt sich zeitlich wohl nix. ;)
 
So nun habe ich es :ugly:

Code:
#target photoshop
var TmpFile = new File( "[COLOR="Blue"]\\PS_SO_tmp.psb[/COLOR]" );
if (app.documents.length > 0) {
	var startDisplayDialogs = app.displayDialogs;
	app.displayDialogs = DialogModes.NO;
	var Doc1 = app.activeDocument;
	if ( Doc1.activeLayer.kind == LayerKind.SMARTOBJECT) {
		var namen = Doc1.activeLayer.name;
		var AD1 = new ActionDescriptor();
		AD1.putPath( charIDToTypeID( "null" ), TmpFile );
		executeAction( stringIDToTypeID( "placedLayerExportContents" ), AD1, DialogModes.NO );
		Doc1.selection.selectAll();
		Doc1.selection.copy();
		Doc1.activeLayer.remove();
		Doc1.paste();
		executeAction( stringIDToTypeID( "newPlacedLayer" ), undefined, DialogModes.NO );
		executeAction( stringIDToTypeID( "placedLayerReplaceContents" ), AD1, DialogModes.NO );
		Doc1.activeLayer.name = namen;
		TmpFile.remove();
	}
	app.displayDialogs = startDisplayDialogs;
}


bei mir wirft das Script die Datei \\PS_SO_tmp.psb auf Laufwerk E: ab, das ist meine Systemplatte, wie das beim Mac ist weiß ich nicht, die Datei wird hier vom Script am Ende wieder gelöscht.


@nubi

Eine Sache mußte ich etwas tricky gestalten, weil ich das nicht so hinbekam wie gewünscht

Code:
		Doc1.selection.selectAll();
		Doc1.selection.copy();
		Doc1.activeLayer.remove();
		Doc1.paste();

Das sollte eigentlich so aussehen:
Code:
		Doc1.artLayers.add();
		Doc1.activeLayer.remove();
klappt auch nur das die neue Ebene dann ganz oben ist, was ja nicht immer so sein muß. Weißt du wie man eine neue Ebene erstellt die direkt über der gerade aktiven Ebene plaziert sein soll?
 
klappt auch nur das die neue Ebene dann ganz oben ist, was ja nicht immer so sein muß. Weißt du wie man eine neue Ebene erstellt die direkt über der gerade aktiven Ebene plaziert sein soll?

Wusste es bisher nicht, hab' aber mal nachgesehen. Die Ebene kann nachträglich gezielt positioniert werden:

Code:
var layer = Doc1.activeLayer;
var newLayer = Doc1.artLayers.add();
newLayer.move(layer, ElementPlacement.PLACEBEFORE);
layer.remove();
 
@nubi

Wunderbar, das funktioniert perfekt. :top:


@Olaf

Hier nun die Final-Version, etwas Ressourcensparender
Code:
#target photoshop
var TmpFile = new File( "\\PS_SO_tmp.psb" );
if (app.documents.length > 0) {
	var startDisplayDialogs = app.displayDialogs;
	app.displayDialogs = DialogModes.NO;
	var Doc1 = app.activeDocument;
	if ( Doc1.activeLayer.kind == LayerKind.SMARTOBJECT) {
		var namen = Doc1.activeLayer.name;
		var AD1 = new ActionDescriptor();
		AD1.putPath( charIDToTypeID( "null" ), TmpFile );
		executeAction( stringIDToTypeID( "placedLayerExportContents" ), AD1, DialogModes.NO );
		var actLayer = Doc1.activeLayer;
		var newLayer = Doc1.artLayers.add();
		newLayer.move(actLayer, ElementPlacement.PLACEBEFORE);
		actLayer.remove();
		executeAction( stringIDToTypeID( "newPlacedLayer" ), undefined, DialogModes.NO );
		executeAction( stringIDToTypeID( "placedLayerReplaceContents" ), AD1, DialogModes.NO );
		Doc1.activeLayer.name = namen;
		TmpFile.remove();
	}
	app.displayDialogs = startDisplayDialogs;
}
 
Funktioniert ja tatsächlich! :p

Danke dir Marianne. Scripten muss ich mir vielleicht auch nochmal irgendwann ins Gehirn tun. ;)
 
Ja natürlich funktioniert das, halbe Sachen gibt es nicht. :)

Mit dem Script sparst du jetzt viel Zeit, so bleibt mehr Zeit für deine Homepage, ich möchte ja auch was von dir lernen. ;)
 
Ja natürlich funktioniert das, halbe Sachen gibt es nicht. :)

Mit dem Script sparst du jetzt viel Zeit, so bleibt mehr Zeit für deine Homepage, ich möchte ja auch was von dir lernen. ;)

Kann ich das jetzt bei mir (CS3 unter Windows XP) auch einbinden? Wenn ja, wäre ich dankbar für den Weg dahin. Ich habe von Scripten genau null Ahnung, leider, wüde aber genau dieses Script auch sehr gern nutzen!

Gruß
lasthour
 
@lasthour

Den Code mußt du nur kopieren und in eine Datei einfügen welche du x-beliebiger-name.jsx nennst, die Endung jsx ist wichtig.

Die Datei kopierst du dann ins Verzeichnis:
E:\Programme\Adobe\Adobe Photoshop CS3\Vorgaben\Skripten

Laufwerksbuchstaben natürlich anpassen.

Wenn du jetzt PS startest, kannst du das Script über Menü:Datei>Scripten>x-beliebiger-name ausführen, du kannst auch eine Tastenkombi dem Befehl zuweisen.

Das Script ist so ausgelegt, das es nur etwas macht, wenn die aktive Ebene ein SmartObject ist.
 
Ah ja, danke! Der erste Schritt war mir nämlich nicht klar ... Jetzt müßte es eigentlich funktionieren, mal sehen.

Gruß
lasthour
 
@nubi

ganz normal über Tastaturbefehle... (Shift+Alt+Strg+K), Reiter [Tastaturbefehle], Tastaturbefehle für: "Anwendungsmenü" und dann >Datei, Scripten> und den Script auswählen. Ganz normal halt. :)
 
@mariane

Jetzt klappt's super über Kurzbefehl, danke noch mal!

Hat sich ja echt gelohnt, den Thread wieder auszugraben ...:)

Gruß
lasthour
 
Das will ich jetzt wissen ...
green_smilie.gif
:evil:
 
WERBUNG
Zurück
Oben Unten