-
Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hallo,
ich möchte eine PS (cs2) Aktion aufzeichnen, mit der die EXIF-Daten als Text übernommen werden und im Bild eingeblendet werden können. (z.B. Datum und Uhrzeit).
Ich benötige das für Versicherungsfälle.
Ist das mit PS möglich? :(
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Da fällt mir im Moment nur dieses Programm ein
http://dts8888.com/vPTS/vpts.htm
Gruß
Koebes Henry
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
vielleicht hier ? habe es selber noch nicht probiert.
http://www.smart-script.de/
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
> vielleicht hier ? habe es selber noch nicht probiert.
> http://www.smart-script.de/
Das ist übler Spaghetti-Code, der nicht funktioniert und nebenbei gleich das gesamte Photoshop lahmlegt.
@OP: für Windows oder OS X? Für letzteres wäre eine Script-Lösung aus exiftool und ImageMagick denkbar.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Aber wie wende ich den Script "ExifStamp v1.1.js" in PS cs2 an?
Wohin muss ich die Datei kopieren und wie rufe ich die Funktion auf?
Fragen über Fragen ?! :confused:
Ich habe doch nicht so viel Ahnung von PS.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
...habe es schon selbst herrausgefunden, aber der Script läuft bei mir auch nicht.:mad:
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Dann trau ich mich hier mit einem Script aus der Deckung:
var aD = activeDocument;
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
aD.artLayers.add();
aD.activeLayer.kind = LayerKind.TEXT;
// Schriftart festlegen durch die Zahl in eckigen Klammern in fonts[]
// vorher Textwerkzeug aufrufen, 1. Element in der Liste ist fonts[0]
aD.activeLayer.textItem.font = fonts[7].postScriptName;
// Textgroesse festlegen, bei Bedarf Faktor 0.01 anpassen
aD.activeLayer.textItem.size = 0.01 * Math.sqrt(aD.height.value * aD.width.value);
// Position festlegen,5% entfernt vom linken Rand und unteren Rand
aD.activeLayer.textItem.position = ([aD.width.value * 0.05, aD.height.value * 0.95]);
// info.exif[15][1] ist Datum/Zeit ohne Text "Date Time" (das ist exif[15][0])
// Date Time hat das Format 'YYYY:MM:TT hh:mm:ss', das jetzt auseinander nehmen
// substring funktioniert leider fehlerhaft, deshalb beim Datum Umweg über split
exifUhr = aD.info.exif[15][1].substring(10);
Datumteile = aD.info.exif[15][1].substring(0,10).split(":");
exifDatum = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
// und nun den Text schreiben
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr;
app.preferences.rulerUnits = startRulerUnits;
Ablauf in einer Aktion:
- Script aufrufen
- Da die neu angelegte Textebene aktiv ist, ggf. über Textwerkzeug Textfarbe ändern
- Da die neu angelegte Textebene aktiv ist, ggf. über Ebene, Ebenenstil, Kontur mit 1-2 Pixel und einer z. B. weißen Farbe bei schwarzem Text das Problem mit schwarzer Schrift auf dunklem Hintergrund lösen
Funktioniert so bei mir mit CS2
Viel Spaß
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
> Funktioniert so bei mir mit CS2
Ich sehe 2x den Text "undefined" und dann meinen Namen. Welches der verschiedenen Datum-Tags soll Dein Script eigentlich auswerten?
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Danke für den Hinweis. Beim nachträglichen Testen war mir was durcheinander geraten, hier die hoffentlich richtige Version (aD.exif.info[23] an Stelle von aD.exif.info[15]). Bei CS2, 9.02 sollte so der Inhalt des Feldes 'Datum Uhrzeit' der Kameradaten1 ausgegeben werden.
Zitat:
Bezug auf die Nachricht von Dr. Vo
var aD = activeDocument;
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
aD.artLayers.add();
aD.activeLayer.kind = LayerKind.TEXT;
// Schriftart festlegen durch die Zahl in eckigen Klammern in fonts[]
// vorher Textwerkzeug aufrufen, 1. Element in der Liste ist fonts[0]
aD.activeLayer.textItem.font = fonts[7].postScriptName;
// Textgroesse festlegen, bei Bedarf Faktor 0.01 anpassen
aD.activeLayer.textItem.size = 0.01 * Math.sqrt(aD.height.value * aD.width.value);
// Position festlegen,5% entfernt vom linken Rand und unteren Rand
aD.activeLayer.textItem.position = ([aD.width.value * 0.05, aD.height.value * 0.95]);
// info.exif[23][1] ist Datum/Zeit ohne Text "Date Time" (das ist exif[23][0])
// Date Time hat das Format 'YYYY:MM:TT hh:mm:ss', das jetzt auseinander nehmen
// substring funktioniert leider fehlerhaft, deshalb beim Datum Umweg über split
exifUhr = aD.info.exif[23][1].substring(10);
Datumteile = aD.info.exif[23][1].substring(0,10).split(":");
exifDatum = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
// und nun den Text schreiben
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr;
app.preferences.rulerUnits = startRulerUnits;
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Langsam wird es peinlich, aber dafür habe ich jetzt das Problem verstanden. Die EXIF-Informationen stehen je nach Kamera in unterschiedlichen Feldern. Bei der 5D steht Datum/Zeit in activeDocument.info.exif[23][1], bei der 300D in activeDocument.info.exif[2][1].
Zum Finden der richtigen Felder
alert(activeDocument.info.exif);
verwenden und abzählen (bei Null anfangen). Es sind immer Paare, z. B. Make, Canon; Model, EOS300D usw.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Dr. Vo
Langsam wird es peinlich, aber dafür habe ich jetzt das Problem verstanden. Die EXIF-Informationen stehen je nach Kamera in unterschiedlichen Feldern. Bei der 5D steht Datum/Zeit in activeDocument.info.exif[23][1], bei der 300D in activeDocument.info.exif[2][1].
Zum Finden der richtigen Felder
alert(activeDocument.info.exif);
verwenden und abzählen (bei Null anfangen). Es sind immer Paare, z. B. Make, Canon; Model, EOS300D usw.
SUPER!!!
Vielen Dank, das ist genau das, was ich suchte.
Wie ich sehe kennst du dich ganz gut mit Scripten aus. Einen Wunschsch hätte ich für diesen Script aber noch. (oder waren es dann doch 2 oder3...);)
- die Schriftgröße sollte immer Proportional (%) zur Bildgröße sein
- die Schriftart soll immer "Greas" sein
- die Textfarbe sollte immer (RGB 240/100/50) sein
- der Text sollte einen kleinen Schatten haben, damit er auf allen Hintergründen zu sehen ist
- und das Datum sollte rechts untenim Bild erscheinen und immer Prozentual zur Bildgröße den gleichen Randabstand haben.
...ja, dann währe ich wunschlos Glücklich.
Es wäre toll, wenn du dich noch einmal ans Programmieren machst und meine kleinen Wünsche erfüllen könntest.
Nochmals vielen Dank für deine Mühe!:D
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Linsen - Dieter
- die Schriftart soll immer "Greas" sein
- die Textfarbe sollte immer (RGB 240/100/50) sein
- der Text sollte einen kleinen Schatten haben, damit er auf allen Hintergründen zu sehen ist
Das kannst Du alles selber machen:
- Textwerkzeug aufrufen und von oben mit Null beginnend abzählen, an welcher Position die von Dir gewünschte Schriftart ist und die Zahl dann in die eckigen Klammern von fonts[] eintragen.
- Direkt nach dem Aufruf des Scripts das Textwerkzeug öffnen (Taste T), in das farbige Feld klicken und dann die RGB-Zahlen eintragen (wird auch in einem Makro richtig aufgezeichnet.
- Direkt nach dem Aufruf des Scripts über Ebene, Ebenenstil, Kontur die gewünschten Einstellungen vornehmen (wird auch in einem Makro richtig aufgezeichnet)
Zitat:
Bezug auf die Nachricht von Linsen - Dieter
- die Schriftgröße sollte immer Proportional (%) zur Bildgröße sein
Da habe ich mir schon die Zähne ausgebissen, weil mir der Zusammenhang zwischen Bildgröße und der Punktangabe bei der Schriftgröße nicht klar ist. Vielleicht kann mir hier jemand auf die Sprünge helfen.
Zitat:
Bezug auf die Nachricht von Linsen - Dieter
- die Schriftgröße sollte immer Proportional (%) zur Bildgröße sein
- und das Datum sollte rechts untenim Bild erscheinen und immer Prozentual zur Bildgröße den gleichen Randabstand haben.
Ich schau mal, gib mir ein paar Tage Zeit.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Dr. Vo
Ich schau mal, gib mir ein paar Tage Zeit.
Na klar, sollst du haben.
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Linsen - Dieter
Einen Wunschsch hätte ich für diesen Script aber noch. (oder waren es dann doch 2 oder3...);)
Vielleicht ist jetzt ja schon Weihnachten.
Ich habe das Script etwas überarbeitet:
- Nur im vorderen Bereich können/müssen einige Einstellungen vorgenommen werden.
- Die Fontgröße wird anders berechnet.
- Wie bisher ist der neue Text auf einer eigenen Ebene
- Schriftfarbe ist wie bisher über Textwerkzeug nach Script einzustellen
- Kontur, Schlagschatten sind wie bisher über Ebene, Ebenenstil nach Script einzustellen
- Und der Textlayer hat eine andere Eigenschaft mit der Möglichkeit, nach dem Script über das Textwerkzeug, Zeichen-/Absatzpalette, Reiter Absatz die Ausrichtung des Textes in der Zeile anzupassen. Z. B. mit der Schaltfläche 'Text im Blocksatz ausrichten' das Datum links und die Uhrzeit rechts.
- Und da der Textlayer nach dem Script die aktuelle Ebene ist, können alle Texteinstellungen über Makro automatisiert werden.
Hoffentlich klappt's.
// ************************************************** ************
// Script schreibt Datum/Uhrzeit der Aufnahme aus
// den EXIF auf eine eigene Textebene Dr. Vo 10/2006
//
// ************************************************** ************
// Nachfolgend die konfigurierbaren Einstellungen
// ************************************************** ************
// Datum/Uhrzeit bei verschiedenen Kameras in
// verschiedenen Feldern
// iDU = 23 bei EOS5D; iDU = 2 bei EOS300D
var iDU = 23;
// Schriftart festlegen
// 1. Element in der Schriftartliste bei
// Textwerkzeug ist iFo = 0; 8. Element iFo = 7;
var iFo = 7;
// Schriftgroesse festlegen durch iSg
// je kleiner, desto kleiner die Schrift
var iSg = 0.9;
// Position der Textebene festlegen.
// Angabe in Prozent vom Referenzpunkt unten links
// iHo = 5 bedeutet 5% entfernt vom linken Rand
// iVe = 5 bedeutet 5% entfernt vom unteren Rand
var iHo = 5;
var iVe = 5;
// **************************************
// ab hier rumfummeln nur noch mit Ahnung
// **************************************
var aD = activeDocument;
var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.CM;
app.preferences.typeUnits = TypeUnits.MM;
aD.artLayers.add();
aD.activeLayer.kind = LayerKind.TEXT;
aD.activeLayer.textItem.font = fonts[iFo].postScriptName;
aD.activeLayer.textItem.size = iSg * (aD.height.value + aD.width.value)/2;
aD.activeLayer.textItem.position = ([aD.width.value * iHo/100, aD.height.value * (100 - iVe)/100]);
// Date Time YYYY:MM:DD hh:mm:ss in DD.MM.YYYY hh:mm:ss umbauen
// substring fehlerhaft, deshalb beim Datum Umweg über split
exifUhr = aD.info.exif[iDU][1].substring(10);
Datumteile = aD.info.exif[iDU][1].substring(0,10).split(":");
exifDatum = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr;
// Text in Paragraphtext umwandeln, damit nachtraegliches
// Positionieren ueber Textwerkzeug funktioniert
aD.activeLayer.textItem.kind = TextType.PARAGRAPHTEXT;
aD.activeLayer.textItem.minimumLetterScaling = 0;
aD.activeLayer.textItem.desiredLetterScaling = 0;
// Breite des Textlayers anpassen auf Bildbreite minus 2 * iHo und in mm umrechnen
aD.activeLayer.textItem.width = aD.width.value * (1 - 2 * iHo / 100) * 10;
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Dr. Vo
Ich habe das Script etwas überarbeitet:
:D Danke !!! :D
ich werde den Scipt heute noch testen
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Linsen - Dieter
:D Danke !!! :D
ich werde den Scipt heute noch testen
Gruss
Dieter
Und funktionierts ??
Martin
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Martin H.
Und funktionierts ??
Martin
Ja, es funktioniert!:D
Ich muß nur für meine 300D den Wert "12" eintragen. Für die 30D werde ich es noch mal austesten.
Ich bin jetzt für eine Woche mal nicht online (Schulung in Düsseldorf) - werde mich aber dann wieder melden und über neue Erkenntnisse in Sachen Scipt und Aktionen melden.;)
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hallo,
Ich hätte dazu auch noch eine Frage, eigentlich ganz viele ...
Ist es auch möglich, das Objektiv und das aktive Messfeld des Autofocus per PhotoshopScript auszulesen (siehe dazu http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Canon.html), bei der Canon 350D wäre das LensType -> Zahl (für das Objektiv) und AFPointsUsed -> Byte (Bit 0 = Right, Bit 1 = Mid-right, Bit 2 = Bottom, Bit 3 = Center, Bit 4 = Top, Bit 5 = Mid-left, Bit 6 = Left)?
Am liebsten hätte ich auch das Histogramm als Extralayer im Bild, das Beispiel im Scripthandbuch funktioniert irgendwie bei mir nicht, bin allerdings auch nicht gerade der Scriptprofie :o.
Gruß, Olav
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Olav
das Beispiel im Scripthandbuch funktioniert irgendwie bei mir nicht, bin allerdings auch nicht gerade der Scriptprofie :o.
Daran wollte ich mich auch bereits versuchen, habe aber bislang keine Möglichkeit gefunden, per Script aus PS heraus externe Programme zu starten. Hast Du mal die Referenz des Beispiels aus dem Scripthandbuch?
Gruß, Denny
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hier ist ein kleines Script, welches die verfügbaren Exifs übersichtlich mit Arrayindex, Feldbeschreibung und Inhalt ausgibt:
var aD = activeDocument;
var exiftext = "";
for (var i = 0; i < aD.info.exif.length; i++)
exiftext += i + " - " + aD.info.exif[i][0] + " - " + aD.info.exif[i][1] + "\n";
alert(exiftext);
Damit kann man einfach sehen, welche Exifs verfügbar sind. Und damit dann in meinem Script die Zeile
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr;
nach Bedarf modifizieren. Wenn z. B. das gesuchte zusätzliche Feld in der Arrayindex 13 steht, dann z. B. ändern in
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr + " " + aD.info.exif[13][1];
usw., ganz einfach.
Histogramm schaue ich mir mal an, das ist eine interessante Idee. Gib mal das Beispiel her.
Gruß
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Dr. Vo
Histogramm schaue ich mir mal an, das ist eine interessante Idee. Gib mal das Beispiel her.
Das Beispiel ist in der "JavaScript Reference Guide.pdf" (...Programme\Adobe\Adobe Photoshop CS2\Skript Handbuch\) ist auf Seite 78 und heißt Histogram.jsx; der Code ist etwas lang, den muß ich erstmal formatieren, ich füge den dann hier noch an.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
so, hier das Script Histogram.jsx aus dem Handbuch
Code:
// Save the current preferences
var startRulerUnits = app.preferences.rulerUnits
var startTypeUnits = app.preferences.typeUnits
var startDisplayDialogs = app.displayDialogs
// Set Adobe Photoshop CS2 to use pixels and display no dialogs
app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
app.displayDialogs = DialogModes.NO
// if there are no documents open then try to open a sample file
if (app.documents.length == 0) {
open(File(app.path + "/Samples/Eagle.psd"))
}
// get a reference to the working document
var docRef = app.activeDocument
// create the output file
// first figure out which kind of line feeds we need
if ($.os.search(/windows/i) != -1) {
fileLineFeed = "windows"
} else {
fileLineFeed = "macintosh"
}
// create the output file accordingly
fileOut = new File("~/Desktop/Histogram.log")
fileOut.lineFeed = fileLineFeed
fileOut.open("w", "TEXT", "????")
// write out a header
fileOut.write("Histogram report for " + docRef.name)
// find out how many pixels I have
var totalCount = docRef.width.value * docRef.height.value
// more info to the out file
fileOut.write(" with a total pixel count of " + totalCount + "\n")
// channel indexer
var channelIndex = 0
// remember which channels are currently active
var activeChannels = app.activeDocument.activeChannels
// document histogram only works in these modes
if (docRef.mode == DocumentMode.RGB ||
docRef.mode == DocumentMode.INDEXEDCOLOR ||
docRef.mode == DocumentMode.CMYK) {
// activate the main channels so we can get the documents histogram
TurnOnDocumentHistogramChannels(docRef)
// Output the documents histogram
OutputHistogram(docRef.histogram, "Luminosity", fileOut)
}
// local reference to work from
var myChannels = docRef.channels
// loop through each channel and output the histogram
for (var channelIndex = 0; channelIndex < myChannels.length; channelIndex++) {
// the channel has to be visible to get a histogram
myChannels[channelIndex].visible= true
// turn off all the other channels
for (var secondaryIndex = 0; secondaryIndex < myChannels.length;
secondaryIndex++) {
if (channelIndex != secondaryIndex) {
myChannels[secondaryIndex].visible= false
}
}
// Use the function to dump the histogram
OutputHistogram(myChannels[channelIndex].histogram,
myChannels[channelIndex].name, fileOut)
}
// close down the output file
fileOut.close()
// reset the active channels
docRef.activeChannels = activeChannels
// Reset the application preferences
app.preferences.rulerUnits = startRulerUnits
app.preferences.typeUnits = startTypeUnits
app.displayDialogs = startDisplayDialogs
// Utility function that takes a histogram and name
// and dumps to the output file
function OutputHistogram(inHistogram, inHistogramName, inOutFile) {
// find ouch which count has the largest number
// I scale everything to this number for the output
var largestCount = 0
// a simple indexer I can reuse
var histogramIndex = 0
// see how many samples we have total
var histogramCount = 0
// search through all and find the largest single item
for (histogramIndex = 0; histogramIndex < inHistogram.length;
histogramIndex++) {
histogramCount += inHistogram[histogramIndex]
if (inHistogram[histogramIndex] > largestCount)
largestCount = inHistogram[histogramIndex]
}
// These should match
if (histogramCount != totalCount) {
alert("Something bad is happening!")
}
// see how much each "X" is going to count as
var pixelsPerX = largestCount / 100
// output this data to the file
inOutFile.write("One X = " + pixelsPerX + " pixels.\n")
// output the name of this histogram
inOutFile.write(inHistogramName + "\n")
// loop through all the items and output in the following format
// 001
// 002
for (histogramIndex = 0; histogramIndex < inHistogram.length;
histogramIndex++) {
// I need an extra "0" for this line item to keep everything in line
if (histogramIndex < 10)
inOutFile.write("0")
// I need an extra "0" for this line item to keep everything in line
if (histogramIndex < 100)
inOutFile.write("0")
// output the index to file
inOutFile.write(histogramIndex)
// some spacing to make it look nice
inOutFile.write(" ")
// figure out how many X’s I need
var outputX = inHistogram[histogramIndex] / largestCount * 100
// output the X’s
for (var a = 0; a < outputX; a++)
inOutFile.write("X")
inOutFile.write("\n")
}
inOutFile.write("\n")
}
// Function to active all the channels according to the documents mode
// Takes a document reference for input
function TurnOnDocumentHistogramChannels(inDocument) {
// see how many channels we need to activate
var visibleChannelCount = 0
// based on the mode of the document
switch (inDocument.mode) {
case DocumentMode.BITMAP:
case DocumentMode.GRAYSCALE:
case DocumentMode.INDEXEDCOLOR:
visibleChannelCount = 1
break;
case DocumentMode.DUOTONE:
visibleChannelCount = 2
break;
case DocumentMode.RGB:
case DocumentMode.LAB:
visibleChannelCount = 3
break;
case DocumentMode.CMYK:
visibleChannelCount = 4
break;
case DocumentMode.DUOTONE:
visibleChannelCount = 4
break;
case DocumentMode.MULTICHANNEL:
default:
visibleChannelCount = inDocument.channels.length + 1
break;
}
// now get the channels to activate into a local array
var aChannelArray = new Array()
// index for the active channels array
var aChannelIndex = 0
for(var channelIndex = 0; channelIndex < inDocument.channels.length;
channelIndex++) {
if (channelIndex < visibleChannelCount) {
aChannelArray[aChannelIndex++] = inDocument.channels[channelIndex]
}
}
// now activate them
inDocument.activeChannels = aChannelArray
}
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Das Script histogram.jsx legt auf dem Desktop eine neue Datei an und schreibt verschiedene Histogramme als Balkendiagramme hinein.
Im Scriptbeispiel paths.jsx (ebenfalls im Java Script Reference Guide) ist erklärt, wie man über Script Linien zeichnet.
Beide Scripts müsste man für ein Histogramm als extra Layer kombinieren:
Neuen Layer anlegen (255 Pixel breit) und dann senkrechte Linien in der entsprechenden Länge für jeden der 255 Histogrammpunkte zeichnen.
Gruß
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
@Dr. Vo
Die Linien für das Histogramm habe ich jetzt mit den ScriptingListener aufgezeichnet, anders bekomme ich das nicht gebacken (neuer Pfad; Linie + Linie usw.; Füllen, Pfad löschen). Das ganze ist aber recht langsam, was wohl daran liegt, daß der Code vom ScriptingListener nicht gerade optimal ist.
Es muß doch einen einfachen Befehl in der Art: zeichne Linie von x,y bis x',y' geben, finde dazu aber nichts in der Scriptreferenz. Dein Tip mit dem Scriptbeispiel paths.jsx funktioniert bei mir überhaupt nicht. Naja und ohne englisch Kenntnisse schaue ich in die Scriptreferenz wie ein Schwein ins Uhrwerk :o
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Olav
@
Dr. Vo
Die Linien für das Histogramm habe ich jetzt mit den ScriptingListener aufgezeichnet, anders bekomme ich das nicht gebacken (neuer Pfad; Linie + Linie usw.; Füllen, Pfad löschen). Das ganze ist aber recht langsam, was wohl daran liegt, daß der Code vom ScriptingListener nicht gerade optimal ist.
Es muß doch einen einfachen Befehl in der Art: zeichne Linie von x,y bis x',y' geben, finde dazu aber nichts in der Scriptreferenz. Dein Tip mit dem Scriptbeispiel paths.jsx funktioniert bei mir überhaupt nicht. Naja und ohne englisch Kenntnisse schaue ich in die Scriptreferenz wie ein Schwein ins Uhrwerk :o
Ich habe beim Kopieren der Beispielscripte in meinen Lieblingseditor (Notepad:o ) immer Probleme mit den Gänsefüßchen. Wenn ich die durch neu eingetippte ersetze, funktioniert das Script normalerweise. Im Beispielscript paths.jsx ist allerdings ein Fehler in der Zeile
lineArray31].leftDirection = Array(100, 50)
Es muss
lineArray3[1].leftDirection = Array(100, 50)
sein, d. h. die erste öffnende eckige Klammer fehlt.
Hier ein ganz rudimentäres Scriptbeispiel für das Zeichnen von Linien. Es soll eine Art Treppe ergeben, vorher von Hand Vordergrundfarbe schwarz und Hintergrundfarbe weiß einstellen.
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;
// Neues Dokument anlegen
var docRef = app.documents.add(255, 255, 72, "Treppe", NewDocumentMode.RGB);
var lineSubPathArray = new Array();
for (var i = 0; i < 255; i++)
{
var lineArray = new Array();
// ersten Eckpunkt der Linie anlegen
lineArray[0] = new PathPointInfo;
lineArray[0].kind = PointKind.CORNERPOINT;
lineArray[0].anchor = Array(i, 255);
lineArray[0].leftDirection = lineArray[0].anchor;
lineArray[0].rightDirection = lineArray[0].anchor;
// zweiten Eckpunkt der Linie anlegen
lineArray[1] = new PathPointInfo;
lineArray[1].kind = PointKind.CORNERPOINT;
lineArray[1].anchor = Array(i, 255 - i);
lineArray[1].leftDirection = lineArray[1].anchor;
lineArray[1].rightDirection = lineArray[1].anchor;
lineSubPathArray[0]= new SubPathInfo();
lineSubPathArray[0].operation = ShapeOperation.SHAPEXOR;
lineSubPathArray[0].closed = false;
lineSubPathArray[0].entireSubPath = lineArray;
// neuen Pfad anlegen
var myPathItem = docRef.pathItems.add(String(i), lineSubPathArray);
// und zeichnen
myPathItem.strokePath(ToolType.PENCIL);
}
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
app.displayDialogs = startDisplayDialogs;
Das lineArray[0] definiert einen Eckpunkt einer Linie, lineArray[1] den zweiten und der ganze Rest ist dann zum Anlegen des Pfades und Zeichnen der Linie. Ist jetzt alles andere als schön, da so 255 Pfade angelegt werden. Das müsste man jetzt in langen Winternächten in das histogram.jsx einbauen. Mir fehlt da leider im Moment die Zeit zu.
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
@Dr. Vo
Ich hab' den Script mal ausprobiert und mußte feststellen, daß es doch recht langsam arbeitet, was wohl an der hohen Anzahl der Pfade liegt, die bei einem Histogramm auch in ähnlicher Größenordnung zu erwarten wären.
Ich habe derweil verschieden Sachen ausprobiert.
Meine Lösung ist nun das Erstellen einer Auswahl die 1 Pixel breit und zum entsprechenden Tonwert hoch ist, das ganze von Tonwert 0 bis 255. Anschließen eine Ebene erstellen und diese mit Farbe füllen.
Das Histogramm zeichne ich nun wie folgt:
Code:
for (histogramIndex = 0; histogramIndex < inHistogram.length; histogramIndex++) {
var outputX = inHistogram[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(Color_Histogramm)
docRef.selection.deselect()
}
die Funktion sel() erstellt die Auswahl an der Position x, y mit einer Breite von b und einer Höhe von h. SelectionType.EXTEND sorgt dafür das die Auswahl erweitert wird (+Modus).
Code:
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)
}
Das ganze ist schon etwas schneller, dauert aber auch noch merklich, was wohl daran liegt, das sich das Histogramm an der neu erstellten Auswahl während der Abarbeitung des Scripts ständig anpasst. Hier bräuchte ich einen Befehl der Photoshop sagt, tue nichts (nichts aktuallisieren) bis du wieder an der Reihe bist.
Ursprüglich wollte ich eine "Volltonfarbe..."-Einstellungsebene erstellen, aber auch das geht nicht (wäre eigentlich docRef.artLayers.kind = LayerKind.SOLIDFILL aber da wird gemeckert das nur TEXT oder NORMAL ginge).
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Die abschließende letzte } im ersten Code-Fenster ist zuviel, wollte es noch editieren, aber die häßliche 5min-AntiEdit-Sperre hatte was dagegen.
Abbei mal ein Beispiel wie es zurzeit bei mir aussieht, ich habe praktisch drei Ebenen (Histogramm, EXIF daten, Histogramm Hintergrund), das ganze wird dann per Aktion mit Ebeneneffekten garniert, was per Script so nicht möglich wäre und dann in ein SmartObjekt umgewandelt. Dauert ganze 5s die Aktion, ist aber eine nette Spielerrei, um mal das Scripten zu lernen. Was ich noch nicht so recht verstanden habe, ist die Schriftgröße und Schriftart sowie, wie man innerhalb einer Textebene die Schriftgröße mehrmals ändern kann (also erste Zeile Schriftgröße 10, zweite 8 z.B.).
http://img226.imageshack.us/img226/6...beiten2oz6.jpg
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
@Dr. Vo
So, jetzt hatte ich ein wenig Zeit deinenScript zu testen und ihn nach meinen Vorstellungen anzupassen.
Ich habe zwar keinen Plan von JavaScript aber durch Kenntnisse fühere BASIC-Programmierungen konnte ich mich etwas zurecht finden. Mein Ziel war es keine Aktionen zu verwenden und alles automatisch in nur einem Scrip laufen zu lassen.
Veränderungen zu deinen Version sind:
- automatische Grössenanpassung der Schrift
- Textfarbe wird definiert
- Schatteneffekt der Schrift (2x Scriptdurchlauf mit versetzten Koordinaten)
Ja, wie gesagt ich habe nicht die Ahnung von Java, ich habe aus meheren Scripten die ich im Netz fand halt nur etwas zusammenkopiert.
Programmiertechnisch nicht wirklich schön - aaaaber es läuft!
Wer Lust und Zeit hat kann da gerne mal drinn aufräumen, und vieleicht fällt euch ja auch noch was ein damit die Schriftart nicht über
textinhalt.font = fonts[6].postScriptName;
sondern über fest def. SchriftNamen z.B. "ARIAL" festgelegt wird. Das würde das übertragen auf andere Rechner vereinfachen da der FONT-Wert nicht neu angepasst werden muss.
Ach wäre eine automatische Modellerkennung und damit versehene Scriptanpassung sinnvoll. Das heisst, es wird in der EXIF das Model 30D erkannt und damit der WERT
Datumteile = dokname.info.exif[14][1]
automatisch eingestellt.
Ich benutze verschiedene Kameras und das würde die arbeit erleichtern.
So, jetzt seit ihr Programmierer gefragt.
Ich freue mich schon auf eure Vorschläge.:D
------------------------------------------------------------------------
// Datumteile = dokname.info.exif[12][1]. - für EOS 300D
// Datumteile = dokname.info.exif[14][1]. - für EOS 30D
// Datumteile = dokname.info.exif[16][1]. - für NIKON COOLPIX 5600 / OLYMPUS D100
{
dokname = app.activeDocument;
// Aktions-Fenster erstellt
var fenster = new Window('dialog', 'EXIF-Datum',[100,100,310,550]);
fenster.zeit_check = fenster.add('checkbox',[20,60,150,80],'Datum/Uhrzeit');
//Laden der Einstellungen
datei = new File("~/exifparameter.txt");
//laden()
{
//Einheiten abspeichern
alteEinheiten = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.INCHES;
//Geschuezte Ebenen ensperren
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
if(ebeneunten.isBackgroundLayer)
{
ebeneunten.duplicate(ebeneunten,ElementPlacement.P LACEBEFORE);
ebeneunten.remove()
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
}
// Erkennen der Dokumentengroesse und auslesen der Bilderhoehe, Festlegen der Farbe
var aufloesung = dokname.resolution;
var dokhoehe = dokname.height;
var dokbreite = dokname.width;
if(dokname.height >= dokname.width)
{
quer = dokname.height;
hoch = dokname.width;
}
else {
quer = dokname.width;
hoch = dokname.height;
}
textfarbe = new SolidColor;
textfarbe.rgb.red = 80;
textfarbe.rgb.green = 80;
textfarbe.rgb.blue = 80;
//Hier wird der Text erstellt
var textgroesse = hoch * 0.03 * 72
exifebene = dokname.artLayers.add();
exifebene.kind = LayerKind.TEXT;
textinhalt = exifebene.textItem;
textinhalt.justification = Justification.RIGHT
textinhalt.position = ([quer * 0.971, hoch * 0.971]);
textinhalt.color = textfarbe;
textinhalt.size = textgroesse;
textinhalt.font = fonts[6].postScriptName;
//Abfragen der EXIF-Daten
exif_daten = dokname.info.exif
exif_wert = '';
textinhalt.contents = ""
//Datum und Uhrzeit
{
finde_exif("Date Time");
zeit = exif_wert;
alter_text = textinhalt.contents
Datumteile = dokname.info.exif[14][1].substring(0,10).split(":");
textinhalt.contents = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
exif_wert = '';
}
}
//Funktion zum Auslesen der EXIF Daten
function finde_exif(exif_feld)
{
for(i = 0; i < exif_daten.length; i++)
{
if(exif_feld == exif_daten[i][0])
{
exif_wert = exif_daten[i][1];
}
}
}
//Funktion zum automatischen Speichern der EInstellungen
function speichern()
{
par1 = fenster.zeit_check.value;
datei.open('w');
datei.write ("S"+par1+"%$");
datei.close();
}
}
//Ist ein Bild geoeffnet
if(app.documents.length)
{
dokname = app.activeDocument;
//Hier wird das Aktions-Fenster erstellt
var fenster = new Window('dialog', 'EXIF-Datum',[100,100,310,550]);
fenster.zeit_check = fenster.add('checkbox',[20,60,150,80],'Datum/Uhrzeit');
//Laden der Einstellungen
datei = new File("~/exifparameter.txt");
//laden()
{
//Einheiten abspeichern
alteEinheiten = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.INCHES;
//Geschuezte Ebenen ensperren
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
if(ebeneunten.isBackgroundLayer)
{
ebeneunten.duplicate(ebeneunten,ElementPlacement.P LACEBEFORE);
ebeneunten.remove()
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
}
// Erkennen der Dokumentengroesse und auslesen der Bilderhoehe, Festlegen der Farbe
var aufloesung = dokname.resolution;
var dokhoehe = dokname.height;
var dokbreite = dokname.width;
if(dokname.height >= dokname.width)
{
quer = dokname.height;
hoch = dokname.width;
}
else {
quer = dokname.width;
hoch = dokname.height;
}
textfarbe = new SolidColor;
textfarbe.rgb.red = 240;
textfarbe.rgb.green = 110;
textfarbe.rgb.blue = 50;
//Hier wird der Text erstellt
var textgroesse = hoch * 0.03 * 72
exifebene = dokname.artLayers.add();
exifebene.kind = LayerKind.TEXT;
textinhalt = exifebene.textItem;
textinhalt.justification = Justification.RIGHT
textinhalt.position = ([quer * 0.97, hoch * 0.97]);
textinhalt.color = textfarbe;
textinhalt.size = textgroesse;
textinhalt.font = fonts[6].postScriptName;
//Abfragen der EXIF-Daten
exif_daten = dokname.info.exif
exif_wert = '';
textinhalt.contents = ""
//Datum und Uhrzeit
{
finde_exif("Date Time");
zeit = exif_wert;
alter_text = textinhalt.contents
Datumteile = dokname.info.exif[14][1].substring(0,10).split(":");
textinhalt.contents = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
exif_wert = '';
}
}
//Funktion zum Auslesen der EXIF Daten
function finde_exif(exif_feld)
{
for(i = 0; i < exif_daten.length; i++)
{
if(exif_feld == exif_daten[i][0])
{
exif_wert = exif_daten[i][1];
}
}
}
//Funktion zum automatischen Speichern der EInstellungen
function speichern()
{
par1 = fenster.zeit_check.value;
datei.open('w');
datei.write ("S"+par1+"%$");
datei.close();
}
}
------------------------------------------------------------------------
Gruss
Dieter
(Sollte der eine oder andere einige ScriptZeilen aus seinem Script wiederfinden und nicht damit einverstanden sein, dass es hier gezeigt wird - meldet euch bei mir und wir können das klären. Der hier gezeige Script ist nicht kommerziell.)
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hi !
In der Zeile 38 und 155 (glaub ich) gehört das P LACEBEFORE in ein PLACEBEFORE geändert !
Das Orig. Script hat ja die Parameter von der 30D ich bekomm aber immer nur den Text "undefined.undefined.f/2.8" ins Bild :-(
mfG
Martin
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
@Martin: Probiere mal mein kleines Script aus dem Beitrag #20 aus und schaue, bei welcher Nummer "Date Time Original" rauskommt.
@Dieter: Mache die automatische Erkennung besser auf den Text "Date Time Original". Daneben gibt es noch "Date Time" und "Date Time Digitized". Bei meiner 300D sind "Date Time Original" und "...Digitized" immer gleich und unterschiedlich zu "Date Time".
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
SORRY!!!:o
... und hier nocheinmal - der sollte laufenbei der 30D
-------------------------------------------------------------------
// Datumteile = dokname.info.exif[12][1]. - für EOS 300D
// Datumteile = dokname.info.exif[14][1]. - für EOS 30D
// Datumteile = dokname.info.exif[16][1]. - für NIKON COOLPIX 5600 / OLYMPUS D100
{
dokname = app.activeDocument;
//Hier wird das Aktions-Fenster erstellt
var fenster = new Window('dialog', 'EXIF-Datum',[100,100,310,550]);
fenster.zeit_check = fenster.add('checkbox',[20,60,150,80],'Datum/Uhrzeit');
//Laden der Einstellungen
datei = new File("~/exifparameter.txt");
//laden()
{
//Einheiten abspeichern
alteEinheiten = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.INCHES;
//Geschuezte Ebenen ensperren
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
if(ebeneunten.isBackgroundLayer)
{
ebeneunten.duplicate(ebeneunten,ElementPlacement.P LACEBEFORE);
ebeneunten.remove()
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
}
// Erkennen der Dokumentengroesse und auslesen der Bilderhoehe, Festlegen der Farbe
var aufloesung = dokname.resolution;
var dokhoehe = dokname.height;
var dokbreite = dokname.width;
if(dokname.height >= dokname.width)
{
quer = dokname.height;
hoch = dokname.width;
}
else {
quer = dokname.width;
hoch = dokname.height;
}
textfarbe = new SolidColor;
textfarbe.rgb.red = 80;
textfarbe.rgb.green = 80;
textfarbe.rgb.blue = 80;
//Hier wird der Text erstellt
var textgroesse = hoch * 0.03 * 72
exifebene = dokname.artLayers.add();
exifebene.kind = LayerKind.TEXT;
textinhalt = exifebene.textItem;
textinhalt.justification = Justification.RIGHT
textinhalt.position = ([quer * 0.971, hoch * 0.971]);
textinhalt.color = textfarbe;
textinhalt.size = textgroesse;
textinhalt.font = fonts[6].postScriptName;
//Abfragen der EXIF-Daten
exif_daten = dokname.info.exif
exif_wert = '';
textinhalt.contents = ""
//Datum und Uhrzeit
{
finde_exif("Date Time");
zeit = exif_wert;
alter_text = textinhalt.contents
Datumteile = dokname.info.exif[14][1].substring(0,10).split(":");
textinhalt.contents = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
exif_wert = '';
}
}
//Funktion zum Auslesen der EXIF Daten
function finde_exif(exif_feld)
{
for(i = 0; i < exif_daten.length; i++)
{
if(exif_feld == exif_daten[i][0])
{
exif_wert = exif_daten[i][1];
}
}
}
//Funktion zum automatischen Speichern der EInstellungen
function speichern()
{
par1 = fenster.zeit_check.value;
datei.open('w');
datei.write ("S"+par1+"%$");
datei.close();
}
}
//Ist ein Bild geoeffnet
if(app.documents.length)
{
dokname = app.activeDocument;
//Hier wird das Aktions-Fenster erstellt
var fenster = new Window('dialog', 'EXIF-Datum',[100,100,310,550]);
fenster.zeit_check = fenster.add('checkbox',[20,60,150,80],'Datum/Uhrzeit');
//Laden der Einstellungen
datei = new File("~/exifparameter.txt");
//laden()
{
//Einheiten abspeichern
alteEinheiten = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.INCHES;
//Geschuezte Ebenen ensperren
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
if(ebeneunten.isBackgroundLayer)
{
ebeneunten.duplicate(ebeneunten,ElementPlacement.P LACEBEFORE);
ebeneunten.remove()
var ebenenanzahl = app.activeDocument.layers.length
var ebeneunten = app.activeDocument.layers[ebenenanzahl-1];
}
// Erkennen der Dokumentengroesse und auslesen der Bilderhoehe, Festlegen der Farbe
var aufloesung = dokname.resolution;
var dokhoehe = dokname.height;
var dokbreite = dokname.width;
if(dokname.height >= dokname.width)
{
quer = dokname.height;
hoch = dokname.width;
}
else {
quer = dokname.width;
hoch = dokname.height;
}
textfarbe = new SolidColor;
textfarbe.rgb.red = 240;
textfarbe.rgb.green = 110;
textfarbe.rgb.blue = 50;
//Hier wird der Text erstellt
var textgroesse = hoch * 0.03 * 72
exifebene = dokname.artLayers.add();
exifebene.kind = LayerKind.TEXT;
textinhalt = exifebene.textItem;
textinhalt.justification = Justification.RIGHT
textinhalt.position = ([quer * 0.97, hoch * 0.97]);
textinhalt.color = textfarbe;
textinhalt.size = textgroesse;
textinhalt.font = fonts[6].postScriptName;
//Abfragen der EXIF-Daten
exif_daten = dokname.info.exif
exif_wert = '';
textinhalt.contents = ""
//Datum und Uhrzeit
{
finde_exif("Date Time");
zeit = exif_wert;
alter_text = textinhalt.contents
Datumteile = dokname.info.exif[14][1].substring(0,10).split(":");
textinhalt.contents = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
exif_wert = '';
}
}
//Funktion zum Auslesen der EXIF Daten
function finde_exif(exif_feld)
{
for(i = 0; i < exif_daten.length; i++)
{
if(exif_feld == exif_daten[i][0])
{
exif_wert = exif_daten[i][1];
}
}
}
//Funktion zum automatischen Speichern der EInstellungen
function speichern()
{
par1 = fenster.zeit_check.value;
datei.open('w');
datei.write ("S"+par1+"%$");
datei.close();
}
}
------------------------------------------------------------------------------------------------------
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von Martin H.
Hi !
In der Zeile 38 und 155 (glaub ich) gehört das P LACEBEFORE in ein PLACEBEFORE geändert !
Das Orig. Script hat ja die Parameter von der 30D ich bekomm aber immer nur den Text "undefined.undefined.f/2.8" ins Bild :-(
mfG
Martin
Ja, du hast recht - dieser Fehler passiert immer wenn der Code hier in das Forum kopiert wird. Bei mir im Editor steht alles richtig - also ohne Leerzeichchen.
Gruss
Dieter
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hallo, sry das ich diesen alten Thread wieder hoch hohle, aber der ist eigentlich perfekt für meine Antwort (; Und zwar verwende ich dieses Script http://www.dforum.net/showpost.php?p=772248&postcount=9 und würde nun aber gerne die Textfarbe(soll weiß sein) und die Formatierung ss:mm:hh DD.MM.YYYY ändern und wenn möglich die Schriftart fix auf Arial setzen. Kennt sich da jemand mit aus? Ich finde da keinen Ansatz, da ich nicht erkennen kann an welcher Stelle die Werte/Text ins Bild gesetzt werden? Vielen Dank max
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Der Text wird mit
Code:
aD.activeLayer.textItem.contents = exifDatum + " " + exifUhr;
(fast ganz am Ende) gesetzt. Wenn die Uhrzeit zuerst gesetzt werden soll, einfach die Reihenfolge austauschen, also
Code:
aD.activeLayer.textItem.contents = exifUhr + " " + exifDatum;
Wenn der Font fest Arial sein soll, muss
Code:
aD.activeLayer.textItem.font = fonts[7].postScriptName;
geändert werden in
Code:
aD.activeLayer.textItem.font = 'ArialMT';
Schrift in weiß ist (meines Wissens) im Script etwas komplizierter, da die Farbwerte abhängig sind vom Farbmodus. Viel einfacher geht das in einer Aktion: Aktionsrekorder anstellen, Script aufrufen, oben im Textwerkzeug weiß einstellen, Aktionsrekorder beenden.
Das ganze Script:
Code:
var aD = activeDocument;
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
aD.artLayers.add();
aD.activeLayer.kind = LayerKind.TEXT;
// Schriftart ist ArialMT (Postscriptname fuer Arial
aD.activeLayer.textItem.font = 'ArialMT';
// Textgroesse festlegen, bei Bedarf Faktor 0.01 anpassen
aD.activeLayer.textItem.size = 0.01 * Math.sqrt(aD.height.value * aD.width.value);
// Position festlegen,5% entfernt vom linken Rand und unteren Rand
aD.activeLayer.textItem.position = ([aD.width.value * 0.05, aD.height.value * 0.95]);
// info.exif[23][1] ist Datum/Zeit ohne Text "Date Time" (das ist exif[23][0])
// Date Time hat das Format 'YYYY:MM:TT hh:mm:ss', das jetzt auseinander nehmen
// substring funktioniert leider fehlerhaft, deshalb beim Datum Umweg über split
exifUhr = aD.info.exif[23][1].substring(10);
Datumteile = aD.info.exif[23][1].substring(0,10).split(":");
exifDatum = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
// und nun den Text schreiben
aD.activeLayer.textItem.contents = exifUhr + " " + exifDatum;
app.preferences.rulerUnits = startRulerUnits;
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Hallo, vielen Dank für deine Erklärungen. Da wurde jetztt einiges klarer (:
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von errweh
Viel einfacher geht das in einer Aktion: Aktionsrekorder anstellen, Script aufrufen, oben im Textwerkzeug weiß einstellen, Aktionsrekorder beenden.
Wenn ist das Script in eine Aktion einbinde, wird immer wieder das Datum aus der ursprünglichen Bilddatei eingefügt.
Man sieht den Sprung in der Textebene i.d. Ebenenpalette ganz gut, erst steht noch das korrekte Datum aus dem aktuellen Bild, dann wird mit dem aus der Aufzeichnung überschrieben.
http://screencast.com/t/eeetDQrhZ
Idee?
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Die erste Frage wäre, ob es ohne den Einfärbeschritt in der Aktion richtig läuft.
Ich habe das Script modifiziert, der Text wird jetzt in weiß ausgegeben. Das kannst Du bei Bedarf selber ändern, an Stelle von 'ffffff' den gewünschten Hexwert eintragen.
Und nicht vergessen, zweimal den Indexwert (im Code unten die [23]) anzupassen, das hat mich 10 Minuten Sucherei gekostet.
Ich habe es in einer Stapelverarbeitung mit CS6 getestet und es funktionierte.
Code:
var aD = activeDocument;
var startRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
aD.artLayers.add();
aD.activeLayer.kind = LayerKind.TEXT;
// Schriftart ist ArialMT (Postscriptname fuer Arial
aD.activeLayer.textItem.font = 'ArialMT';
// Textgroesse festlegen, bei Bedarf Faktor 0.01 anpassen
aD.activeLayer.textItem.size = 0.01 * Math.sqrt(aD.height.value * aD.width.value);
// Textfarbe festlegen
var farbe = new SolidColor();
farbe.rgb.hexValue = 'ffffff';
aD.activeLayer.textItem.color = farbe;
// Position festlegen,5% entfernt vom linken Rand und unteren Rand
aD.activeLayer.textItem.position = ([aD.width.value * 0.05, aD.height.value * 0.95]);
// info.exif[23][1] ist Datum/Zeit ohne Text "Date Time" (das ist exif[23][0])
// Date Time hat das Format 'YYYY:MM:TT hh:mm:ss', das jetzt auseinander nehmen
// substring funktioniert leider fehlerhaft, deshalb beim Datum Umweg über split
exifUhr = aD.info.exif[23][1].substring(10);
Datumteile = aD.info.exif[23][1].substring(0,10).split(":");
exifDatum = Datumteile[2] + "." + Datumteile[1] + "." + Datumteile[0];
// und nun den Text schreiben
aD.activeLayer.textItem.contents = exifUhr + " " + exifDatum;
app.preferences.rulerUnits = startRulerUnits;
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von errweh
Die erste Frage wäre, ob es ohne den Einfärbeschritt in der Aktion richtig läuft.
Ja, ohne "Einfärbeschritt" läuft das vorletzte Script mit korrekten EXIF Datum.
Zitat:
Bezug auf die Nachricht von errweh
Ich habe das Script modifiziert, der Text wird jetzt in weiß ausgegeben. Das kannst Du bei Bedarf selber ändern, an Stelle von 'ffffff' den gewünschten Hexwert eintragen.
Funktioniert :)
Zitat:
Bezug auf die Nachricht von errweh
Und nicht vergessen, zweimal den Indexwert (im Code unten die [23]) anzupassen, das hat mich 10 Minuten Sucherei gekostet.
Wozu ist das gut? *checknixx*
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Ingo checkt nixx, das kommt ins Buch.
Mit dem Index sagst Du dem Script, aus welchem Feld gelesen werden soll. In #20 ist ein kleines Script, mit dem man sich die verfügbaren Felder anzeigen lassen und sich das richtige Datumsfeld heraussuchen kann. Das ist von Kamera zu Kamera unterschiedlich, bei der alten 5D war es in [23], bei der 1DsMkIII ist es in [20], bei der M9 in [21].
Bei der Testerei gestern hatte ich den Index nur einmal geändert und ein komisches Ergebnis bekommen (f/11 undefined).
-
AW: Photoshop Aktion - aus EXIF das Datum im Bild als Text einbetten ???
Zitat:
Bezug auf die Nachricht von errweh
Ingo checkt nixx, das kommt ins Buch.
Mit dem Index sagst Du dem Script, aus welchem Feld gelesen werden soll. In
#20 ist ein kleines Script, mit dem man sich die verfügbaren Felder anzeigen lassen und sich das richtige Datumsfeld heraussuchen kann.
:confused::rolleyes::eek:...ich soll in 6 Jahre alten Beiträgen nachlesen, ich glaube es hackt :D
Gut, bei der 5D IV funktioniert es ja mit 23 prächtig, wegen dem kleinen 06ér Script
Code:
var aD = activeDocument;
var exiftext = "";
for (var i = 0; i < aD.info.exif.length; i++)
exiftext += i + " - " + aD.info.exif[i][0] + " - " + aD.info.exif[i][1] + "\n";
alert(exiftext);
kann ich mir weiteren Fragen ja sparen, lohnt doch mal in alten Beiträgen zu schnüffeln ;)