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