• 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.
  • Ich freue mich bekannt geben zu können, dass das DSLR-Forum einen neuen Aktionspartner gewinnen konnte.

    Saal Digital bietet Fotoprodukte in HighEnd-Qualität.
    Für die Mitglieder des DSLR-Forums locken Rabatte und Sonderaktionen!
    Alle Informationen dazu sowie ein tolles Einstiegsangebot unseres neuen Kooperationspartners gibt es hier.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Oktober 2025.
    Thema: "Abendstimmung"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Oktober-Wettbewerb hier!
  • 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

Photoshop: Resize mit der Stapelverarbeitung: komplexere Programmierung möglich?

HenrikHX

Themenersteller
Hi

Ich möchte im Grunde zwei Dinge mit der Stapelverarbeitung/Aktionenprogrammierung von Photoshop CS2 erreichen:

- beim runterrechnen der Auflösung eine maximale Kantenlänge vorgeben. Bisher kann ich nur eine Referenzbreite oder -Höhe vorgeben, die jeweils andere Seite wird dann passend umgerechnet. Gebe ich die Breite vor, z.b. 1728px, so errechnet sich daraus bei einem Querformat eine Höhe von 1152px und damit eine Auflösung von rund 2MegaPixel. Bei einem Hochformat allerdings bleibt die Breite bei 1728px, die Höhe jedoch ergibt 2592px, macht 4,4MegaPixel.
Wie erreiche ich also, dass das Querformat auf die Auflösung 1728x1152px und das Hochformat auf 1152x1728px umgerechnet wird?

- daraus ergibt sich die zweite Frage: ist es möglich, für Querformat und Hochformat unterschiedliche Auflösungen beim runterrechnen zu erreichen? Ich möchte z.B. für das Internet beim Querformat eine Auflösung von 533x355px und beim Hochformat 400x600px haben.


Wäre wirklich nett wenn mir jemand weiterhelfen kann :)
Henrik
 
Na ja, komplex ist was anderes. Das erste geht über Datei, Automatisieren, Seite anpassen und beide Werte auf die maximale Kantenlänge setzen. Das zweite geht über Script. Hier eins auf die Schnelle, allerdings nicht getestet: Also Vorsicht!
Code:
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;

var aD = activeDocument;
var langeSeite_hf = 600;
var langeSeite_qf = 533;

if (aD.width.value <= aD.height.value)
{
var kurzeSeite = aD.width.value * langeSeite_hf / aD.height.value;
aD.resizeImage(kurzeSeite, langeSeite_hf);
}
else
{
var kurzeSeite = aD.height.value * langeSeite_qf / aD.width.value;
aD.resizeImage(langeSeite_qf, kurzeSeite);
}

app.preferences.rulerUnits = startRulerUnits;
 
Zuletzt bearbeitet:
wow, sieht kompliziert aus. Warum setzt du nicht einfach statt festen Pixelwerten Prozentwerte ein? Dann ist es völlig egal, ob Hoch- oder Querformat.
 
Warum setzt du nicht einfach statt festen Pixelwerten Prozentwerte ein? Dann ist es völlig egal, ob Hoch- oder Querformat.
Geht für den ersten Fall auch. Im zweiten Fall möchte er für Quer- und Hochformat aber verschiedene Prozentangaben haben. Und dann geht es IMHO nur über eine Fallunterscheidung und dann geht es nur über Script.
 
Geht für den ersten Fall auch. Im zweiten Fall möchte er für Quer- und Hochformat aber verschiedene Prozentangaben haben. Und dann geht es IMHO nur über eine Fallunterscheidung und dann geht es nur über Script.

Wenn ich den TS richtig verstanden habe, möchte er gleich große Bilder im Hoch- wie Querformat. Es soll also eine maximale Kanntenbreite von z.B. 900 px geben.

Wenn die Ursprungsbilder folgende Formate haben:

Querformat 1800 px x 900 px
Hochformat 900 px x 1800 px

würde ich mit der Einstellung "50 %" für Höhe und Breite folgende Größen kriegen:

Querformat 900 px x 450 px
Hochformat 450 px x 900 px

Also genau das, was gewollt ist. Die einzige Einschränkung wäre wenn die ursprünglichen Bilder unterschiedlich groß sind.

Sorry, hatte mich verlesen. In der zweiten Frage will der TS tatsächliche zwei verschieden Größen für Hoch- und Querformat.
 
Zuletzt bearbeitet:
Das Script ist jetzt getestet und noch ein klein bisschen entkompliziert:

Code:
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;

var aD = activeDocument;
var langeSeite_hf = 600;
var langeSeite_qf = 533;

if (aD.width.value <= aD.height.value)
   aD.resizeImage(undefined, langeSeite_hf);
else
   aD.resizeImage(langeSeite_qf);

app.preferences.rulerUnits = startRulerUnits;
_hf und _qf steht für Hochformat und Querformat, also oben die Zahlenangaben nach Bedarf anpassen.
 
Zuletzt bearbeitet:
@Reiner, ich wollte schon anfangen dein Script etwas zu entschlacken, die erste Version ist ja schon reichlich kompliziert, vorallem die Berechnung statt undefined zu nehmen :).
Wobei du statt deiner 3 Rulerunits Zeilen auch einfach am Anfang

Code:
preferences.rulerUnits = Units.PIXELS;

schreiben kannst. Du schüttest den Wert ja nur von einer in die andere Variable.
Es lässt sich auch noch der Algorithmus auswählen mit dem verkleinert werden soll. Wobei man eigentlich noch öffnen speichern und schließen + eine Ordnerauswahl machen müsste..... Sonst nimmt es einem nicht viel Arbeit ab.

Für solche Aufgaben kann man aber auch einfach den Bildprozessor nehmen, da muss es noch nichtmal ein eigenes Script sein.
 
wie fügt man oder frau den code im photoshop ein? :angel: (noobfrage)
bei gedrückter Alt-taste ins menü->Datei->Stripte->*irgendein Script* gehen, dann wird das ExtendScript Toolkit geöffnet, nun den geladenen Script schließen auf im Menü über "Neu" einen neuen Script anlegen und den Code einfügen.

oder alternativ je nach PS-Version

...\Programme\Adobe\Adobe Utilities\ExtendScript Toolkit\ExtendScript Toolkit.exe

oder

...\Programme\Adobe\Adobe Utilities\ExtendScript Toolkit 2\ExtendScript Toolkit 2.exe

ausfühen.


@strauch

nur

preferences.rulerUnits = Units.PIXELS;​

reicht nicht, dann würde die Benutzerdefinierte Einstellung überschrieben werden, daher immer erst auslesen und sichern, dann erst ändern und vor Beendigung des Scripts wieder die benutzerdefinierte Einstellung zurückschreiben.

Deshalb:

var startRulerUnits = app.preferences.rulerUnits; //auslesen und sichern
app.preferences.rulerUnits = Units.PIXELS; //ändern

...

app.preferences.rulerUnits = startRulerUnits; //zurückschreiben​
 
@marianne, danke ist mir nie aufgefallen, da ich eh meist mit Pixeln arbeite. Guter Hinweis. Etwas drüber nachdenken, hätte mir wohl auch geholfen :). Ich dachte immer, wenn ich das app davor weglasse, das dies nur fürs Script gilt, aber dem ist so nicht.
 
@mariane: herzlichen dank! hab jetzt noch eine weitere frage:

kann man den befehl "Schärfen" auch noch ins programm knüpfen? und wie?

und kennt jemand noch ein empfehlenswärtes turtorial für stapelverarbeitung mit ps?
 
@strauch: undefined vergess ich immer wieder. Fang dann mit Null in drei verschiedenen Schreibweisen an, in der Verzweiflung probiere ich ein NOP, pack den ganzen Krempel weg, denk an was anderes und dann plötzlich: undefined :wall.

@mariane: Ich mache es nie über das Extended Tool Script, wie so vieles hat sich mir das nicht so richtig erschlossen. Ich öffne Notepad, kopiere den Programmtext da rein und speicher es dann ab.

Ich habe das Progrämmlein hier nochmal als Zip abgelegt.

@squirrnoff: Du kannst den Aufruf eines Scripts in einer Aktion aufzeichnen. Und als nächsten Schritt in der Aktion kannst Du dann USM aufrufen uswusf. Und dann die Aktion in einer Stapelverarbeitung aufrufen, dann geht alles wie von selbst.
 
kann man den befehl "Schärfen" auch noch ins programm knüpfen? und wie?
Ich habe schon lange nichts mehr gescriptet, aber bis CS2 gehts 100%ig nicht, das wurde auch immer bemängelt.

Ob das mittlerweile in CS3 geht weiß ich nicht, da müßte man mal in die Handbücher schauen. Die findet man unter:
...\Programme\Adobe\Adobe Photoshop CS2\Skript Handbuch
je nach Version statt "CS2" entsprechend "7.0", "CS" oder "CS3".

Man kann aber jedes Script über "Menübefhel einfügen" in eine Aktion aufnehmen, damit sollte das anschließende Schärfen dann auch kein Problem sein. Ist ja letztlich egal ob man das Script ausführt oder eine Aktion.
 
@mariane: Wir sind ja heute sowas von einer Meinung!:)

Übrigens noch zu der Frage Anleitung für Stapelverarbeitung: Schau ausnahmsweise ;) mal in die Hilfe von CS2, da steht wirklich alles drin.
 
@mariane: Wir sind ja heute sowas von einer Meinung!:)
Ja warum denn auch nicht. :)
Ich mache es nie über das Extended Tool Script, wie so vieles hat sich mir das nicht so richtig erschlossen. Ich öffne Notepad, kopiere den Programmtext da rein und speicher es dann ab.
Ja, so gehts natürlich auch. :top: Ich nutze Extended ScriptTool auch nur deshalb, weil ich nicht so Scriptsicher bin - ich mache das einfach zu selten - und etwas hilft einem das Tool schon und sei es nur der Hinweis das eine geschweifte Klammer zuviel ist oder was anderes nicht definiert ist, da gibt es auch Unterschiede zw. CS2 und CS3 so wie ich das gestern erst feststellen mußte und mich 30min. gekostet hat, da würdes du per Notepad verzweifel bzw. PS abschießen. Also die Scriptverfolgung (Debugen) ist schon ganz nützlich.
 
@ReinerV

ich hätte hier auch noch ein kleines bisher noch sher nacktes Script.

  • Ziel ist mal EXIF-Daten ins Bild einzubringen - das ist kein Problem
  • Die Focuspoints anzuzeigen - da habe ich noch gar keine Idee dazu, denn diese stehen PS nicht zur Verfügung, die müßte man direkt aus der Datei einlesen
  • das Histogramm - das funktioniert ebenfalls - ABER:
    es ist sau langsam :(

Eventuell kannst du dir das mal anschauen, ob etwas zu optimieren geht, zeichnen dauer noch länger deshalb mache ich das per Auswahl und füllen, das ist jetzt nur der nackte Teil des Histogramms:
Code:
var startRulerUnits = app.preferences.rulerUnits
var startTypeUnits = app.preferences.typeUnits
var startDisplayDialogs = app.displayDialogs

app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
app.displayDialogs = DialogModes.NO

var docRef = app.activeDocument
var docBreite = docRef.width
var docHoehe = docRef.height
var Rand_rechts = 20
var Rand_unten = 20
var largestCount = 1

textfarbe = new SolidColor;
textfarbe.rgb.red = 255;
textfarbe.rgb.green = 255;
textfarbe.rgb.blue = 255;
var outputX=0

docRef.selection.deselect()
mein = Array (docRef.histogram.length)

for (histogramIndex = 0; histogramIndex < docRef.histogram.length; histogramIndex++) {

mein[histogramIndex]=docRef.histogram[histogramIndex]

		  if (docRef.histogram[histogramIndex] > largestCount){
			largestCount = docRef.histogram[histogramIndex]
   }
}
for (histogramIndex = 0; histogramIndex < docRef.histogram.length; histogramIndex++) {
outputX = mein[histogramIndex] / largestCount * 100
		sel(docBreite - 256 - Rand_rechts + histogramIndex, docHoehe - Rand_unten - outputX, outputX, 1)
	}
	var layer_hh = docRef.artLayers.add()
		layer_hh.name = "Histogramm"
		layer_hh.fillOpacity = 67
	docRef.selection.fill(textfarbe)
	docRef.selection.deselect()
//--------------------------------------
app.preferences.rulerUnits = startRulerUnits
app.preferences.typeUnits = startTypeUnits
app.displayDialogs = startDisplayDialogs

//-----------------------------------------
function sel(x,y,h,b) {
	selRegion = Array(Array(x, y),Array(x + b, y),Array(x + b, y + h),Array(x, y + h),Array(x, y))
	docRef.selection.select(selRegion, SelectionType.EXTEND)
}

Eigenartigerweise ist das Script in CS3 langsamer als in CS2. Aussehen tuts dann mal so, hier mit EXIF-Daten und weiterer Formatierung per Action.
 
Zuletzt bearbeitet:
@mariane: Ich schau mir das mal an, Notepad geöffnet und rüberkopiert:o. Allerdings habe ich vor ein paar Monaten auch schon mal was mit dem Histogramm versucht und was soll ich sagen: Es war sowas von saulangsam!
 
@strauch

gut zu wissen, gleich mal sichern.


@all

zwar off-Topic, aber wenn hier schon Script-Profies reinschauen ... :)

Ich habe gestern festgestellt, das bei CS2 das Array "app.activeDocument.info.exif" englisch ist und bei CS3 plötzlich deutsch, damit wäre ein Script Versionsabhängig, das ist schlecht. Klar kann man das abfangen, besser wäre aber soetwas, wenn CS3 wären der Scriptabarbeitung auf englisch eingestellt wäre. Gibt es da eine Möglichkeit/Befehl?

Eine andere Sache: Wie funktioniert denn die Methode .sort? Die sortiert immer alphabetisch, aber nicht numerisch. Also ein Array Test[10, 20, 55, 103, 3, 1006] würde mit Test.sort() zu Test[10, 103, 1006, 20, 3, 55] und nicht wie ich es gern hätte zu Test[3, 10, 20, 55, 103, 1006].
 
WERBUNG
Zurück
Oben Unten