 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Fragen stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
12.09.2007, 13:03
|
#1
|
|
TP-Moderator
Registriert seit: Feb 2003
Ort: Erfurt
|
IPTC Daten von JPGs auslesen
Tach an alle,
da ich mich grad mit diesem Thema rumärgern muss, hier mal ne kleine Funktion mit der die wichtigsten Angaben aus einer JPG-Datei mit PHP ausgelesen werden können. Natürlich müssen die Bilder auch über diese Angaben verfügen. Außer Photoshop und anderen teuren Progs gibts da z.B. auch XnView als Freeware für Win. Mit diesem Tool lassen sich kinderleicht Bilder mit EXIF und ITPC Daten füttern. PHP kann hier aber nur JPG-Dateien auslesen. Bitte mich korrigieren, wenns da noch mehr gibt.
Die Funktion:
PHP-Code:
function holeIPTCdaten( $bild, $echoAusgabe ) {
$size = getimagesize ($bild, &$info);
if ( !empty($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
if(!empty($iptc["2#000"])) {$iptc_RecordVersion = $iptc["2#000"][0]; } else {$iptc_RecordVersion = "k.A.";};
if(!empty($iptc["2#005"])) {$iptc_Objektname = $iptc["2#005"][0]; } else {$iptc_Objektname = "k.A.";};
if(!empty($iptc["2#007"])) {$iptc_Bearbeitungssattus = $iptc["2#007"][0]; } else {$iptc_Bearbeitungssattus = "k.A.";};
if(!empty($iptc["2#010"])) {$iptc_Dringlichkeit = $iptc["2#010"][0]; } else {$iptc_Dringlichkeit = "k.A.";};
if(!empty($iptc["2#015"])) {$iptc_Kategorie = $iptc["2#015"][0]; } else {$iptc_Kategorie = "k.A.";};
if(!empty($iptc["2#020"])) {$iptc_Zusatzkategorien = implode(", ",$iptc["2#020"]); } else {$iptc_Zusatzkategorien = "k.A.";};// Hier Aufpassen
if(!empty($iptc["2#022"])) {$iptc_JobID = $iptc["2#022"][0]; } else {$iptc_JobID = "k.A.";};
if(!empty($iptc["2#025"])) {$iptc_Stichworte = implode(", ",$iptc["2#025"]); } else {$iptc_Stichworte = "k.A.";}; // Hier aufpassen
if(!empty($iptc["2#027"])) {$iptc_Kontaktstelle = implode(" ",$iptc["2#027"]); } else {$iptc_Kontaktstelle = "k.A.";}; // Hier aufpassen
if(!empty($iptc["2#055"])) {$iptc_ErstelltAmTag = $iptc["2#055"][0]; } else {$iptc_ErstelltAmTag = "k.A.";};
if(!empty($iptc["2#060"])) {$iptc_ErstelltAmUhrzeit = $iptc["2#060"][0]; } else {$iptc_ErstelltAmUhrzeit = "k.A.";};
if(!empty($iptc["2#065"])) {$iptc_Programm = $iptc["2#065"][0]; } else {$iptc_Programm = "k.A.";};
if(!empty($iptc["2#070"])) {$iptc_Programmversion = $iptc["2#070"][0]; } else {$iptc_Programmversion = "k.A.";};
if(!empty($iptc["2#075"])) {$iptc_Objektzyklus = $iptc["2#075"][0]; } else {$iptc_Objektzyklus = "k.A.";};
if(!empty($iptc["2#080"])) {$iptc_NamedesAutors = $iptc["2#080"][0]; } else {$iptc_NamedesAutors = "k.A.";};
if(!empty($iptc["2#085"])) {$iptc_TiteldesAutors = $iptc["2#085"][0]; } else {$iptc_TiteldesAutors = "k.A.";};
if(!empty($iptc["2#090"])) {$iptc_Stadt = $iptc["2#090"][0]; } else {$iptc_Stadt = "k.A.";};
if(!empty($iptc["2#092"])) {$iptc_Region = $iptc["2#092"][0]; } else {$iptc_Region = "k.A.";};
if(!empty($iptc["2#095"])) {$iptc_Bundesland = $iptc["2#095"][0]; } else {$iptc_Bundesland = "k.A.";};
if(!empty($iptc["2#100"])) {$iptc_Laendercode = $iptc["2#100"][0]; } else {$iptc_Laendercode = "k.A.";};
if(!empty($iptc["2#101"])) {$iptc_Laendername = $iptc["2#101"][0]; } else {$iptc_Laendername = "k.A.";};
if(!empty($iptc["2#103"])) {$iptc_Auftraggeber = $iptc["2#103"][0]; } else {$iptc_Auftraggeber = "k.A.";};
if(!empty($iptc["2#105"])) {$iptc_Ueberschrift = $iptc["2#105"][0]; } else {$iptc_Ueberschrift = "k.A.";};
if(!empty($iptc["2#110"])) {$iptc_Bildrechte = $iptc["2#110"][0]; } else {$iptc_Bildrechte = "k.A.";};
if(!empty($iptc["2#115"])) {$iptc_Quelle = $iptc["2#115"][0]; } else {$iptc_Quelle = "k.A.";};
if(!empty($iptc["2#116"])) {$iptc_Copyright = $iptc["2#116"][0]; } else {$iptc_Copyright = "k.A.";};
if(!empty($iptc["2#118"])) {$iptc_Kontakt = implode(" ",$iptc["2#118"]); } else {$iptc_Kontakt = "k.A.";}; // Hier aufpassen
if(!empty($iptc["2#120"])) {$iptc_Objektbeschreibung = $iptc["2#120"][0]; } else {$iptc_Objektbeschreibung = "k.A.";};
if(!empty($iptc["2#122"])) {$iptc_Autor = $iptc["2#122"][0]; } else {$iptc_Autor = "k.A.";};
}
//Der Mac macht manchmal komische Umlaute, diese werden dann ersetzt
$iptc_ersetzen = array('§' => 'ß', '«' => '´', '…' => 'Ö','†' => 'Ü','€' => 'Ä','š' => 'ö','Ÿ' => 'ü', 'Š' => 'ä','Ð' => '-' , '' => ' ' );
$iptc_RecordVersion = strtr($iptc_RecordVersion, $iptc_ersetzen);
$iptc_Objektname = strtr($iptc_Objektname, $iptc_ersetzen);
$iptc_Stichworte = strtr($iptc_Stichworte, $iptc_ersetzen);
$iptc_Ueberschrift = strtr($iptc_Ueberschrift, $iptc_ersetzen);
$iptc_Objektbeschreibung = strtr($iptc_Objektbeschreibung, $iptc_ersetzen);
//Anwenden z.B.
//$DateiName = strtr( strtolower( $_FILES['bilddatei']['name'] ), $ersetzen );
if($echoAusgabe){
echo "
<table border='0'>
<tr><td>2#000</td><td><strong>RecordVersion</strong></td><td>$iptc_RecordVersion</td></tr>
<tr><td>2#005</td><td><strong>Objektname</strong></td><td>$iptc_Objektname</td></tr>
<tr><td>2#007</td><td><strong>Bearbeitungssattus</strong></td><td>$iptc_Bearbeitungssattus</td></tr>
<tr><td>2#010</td><td><strong>Dringlichkeit</strong></td><td>$iptc_Dringlichkeit</td></tr>
<tr><td>2#015</td><td><strong>Kategorie</strong></td><td>$iptc_Kategorie</td></tr>
<tr><td>2#020</td><td><strong>Zusatzkategorien</strong></td><td>$iptc_Zusatzkategorien</td></tr>
<tr><td>2#022</td><td><strong>JobID</strong></td><td>$iptc_JobID</td></tr>
<tr><td>2#025</td><td><strong>Stichworte</strong></td><td>$iptc_Stichworte</td></tr>
<tr><td>2#027</td><td><strong>Kontaktstelle</strong></td><td>$iptc_Kontaktstelle</td></tr>
<tr><td>2#055</td><td><strong>Erstellt am (Tag)</strong></td><td>$iptc_ErstelltAmTag</td></tr>
<tr><td>2#060</td><td><strong>Erstellt am (Zeit)</strong></td><td>$iptc_ErstelltAmUhrzeit</td></tr>
<tr><td>2#065</td><td><strong>Programm</strong></td><td>$iptc_Programm</td></tr>
<tr><td>2#070</td><td><strong>Programmversion</strong></td><td>$iptc_Programmversion</td></tr>
<tr><td>2#075</td><td><strong>Objektzyklus</strong></td><td>$iptc_Objektzyklus</td></tr>
<tr><td>2#080</td><td><strong>Name des Autors</strong></td><td>$iptc_NamedesAutors</td></tr>
<tr><td>2#085</td><td><strong>Titel des Autors</strong></td><td>$iptc_TiteldesAutors</td></tr>
<tr><td>2#090</td><td><strong>Stadt</strong></td><td>$iptc_Stadt</td></tr>
<tr><td>2#092</td><td><strong>Region</strong></td><td>$iptc_Region</td></tr>
<tr><td>2#095</td><td><strong>Bundesland</strong></td><td>$iptc_Bundesland</td></tr>
<tr><td>2#100</td><td><strong>Laendercode</strong></td><td>$iptc_Laendercode</td></tr>
<tr><td>2#101</td><td><strong>Laendername</strong></td><td>$iptc_Laendername</td></tr>
<tr><td>2#103</td><td><strong>Auftraggeber</strong></td><td>$iptc_Auftraggeber</td></tr>
<tr><td>2#105</td><td><strong>Ueberschrift</strong></td><td>$iptc_Ueberschrift</td></tr>
<tr><td>2#110</td><td><strong>Bildrechte</strong></td><td>$iptc_Bildrechte</td></tr>
<tr><td>2#115</td><td><strong>Quelle</strong></td><td>$iptc_Quelle</td></tr>
<tr><td>2#116</td><td><strong>Copyright</strong></td><td>$iptc_Copyright</td></tr>
<tr><td>2#118</td><td><strong>Kontakt</strong></td><td>$iptc_Kontakt</td></tr>
<tr><td>2#120</td><td><strong>Objektbeschreibung</strong></td><td>$iptc_Objektbeschreibung</td></tr>
<tr><td>2#122</td><td><strong>Autor</strong></td><td>$iptc_Autor</td></tr>
</table>";
}// ENDE if($echoAusgabe){
}
Der Funktionsaufruf
PHP-Code:
$bild = "meinPassbild.jpg";
holeIPTCdaten($bild, true);
Erster Parameter ist das Bild, wer häts gedacht,
der zweite Parameter, ob man die Echo-Ausgabe haben will(true), oder(false) wenn die Tags einfach nur in ne DB reingeschrieben werden sollen.
Fragt mich bitte nicht was APP13 ist, und was es da sonst noch gibt. Da hab ich noch keinen Dunst von 
__________________
Schöne Grüße aus Thüringen
Stephan Page
Stell Dir vor, hier steht was und keiner liest es!! schon entdeckt?? F1 ist ne geile Taste
Ich beantworte keine E-Mails. Bitte alle Fragen ins Forum
schon gehört??? Das Internet ist voll, die lassen keinen mehr rein!!
Geändert von StephanF (12.09.2007 um 13:06 Uhr).
Grund: vertippselt
|
|
|
13.09.2007, 17:52
|
#3
|
|
TP-Specialist
Registriert seit: May 2005
Ort: Bad Saulgau
|
Nützlich 
__________________
hätte hätte Fahrradkette - wäre wäre Heckenschere - müsste müsste Nordseeküste - würde würde Sprunglaufhürde - sollte sollte Nick Nolte
|
|
|
22.09.2007, 02:50
|
#4
|
|
TP-Veteran
Registriert seit: Apr 2001
Ort: Münster und gerade aus Brisbane
|
Hi,
ich bekomme folgende Fehlermeldung:
Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of getimagesize(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. in /is/htdocs/wp1082333_T9ADT7A4MD/www/wordpress/iptc.php on line 7
Das ganze liegt auf dem Server meines Provider, wo ich nicht auf die INI-Datei zugreifen kann. Was kann ich machen?
Grüße
Jan
|
|
|
22.09.2007, 08:03
|
#5
|
|
TP-Moderator
Registriert seit: Feb 2003
Ort: Erfurt
|
Kann ich mir kaum vorstellen, da allow_call_time_pass_reference standardmäßig auf ON sein sollte.
Probier doch mal ini_set() vor Deinem Script einzusetzen.
PHP-Code:
ini_set('allow_call_time_pass_reference', 'ON');
Ist nur ein Versuch, habe mit Server nicht so viel am Hut.
__________________
Schöne Grüße aus Thüringen
Stephan Page
Stell Dir vor, hier steht was und keiner liest es!! schon entdeckt?? F1 ist ne geile Taste
Ich beantworte keine E-Mails. Bitte alle Fragen ins Forum
schon gehört??? Das Internet ist voll, die lassen keinen mehr rein!!
|
|
|
22.09.2007, 09:11
|
#6
|
|
TP-Insider
Registriert seit: Nov 2006
Ort: Lübeck
|
Moin,
da es auch keine Fehlermeldung ist sondern nur eine Warnug, kann man das eigentlich auch ignorieren.
http://de.php.net/manual/de/ref.errorfunc.php
PHP-Code:
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
|
|
|
24.09.2007, 09:53
|
#7
|
|
TP-Moderator
Registriert seit: Jan 2004
Ort: Marbach
|
Gibt es eine Möglichkeit nur bestimmte EXIF-Daten auszulesen und anzeigen zu lassen?
Ich würde gern nur die Brennweite, die Blende und die Verschlusszeit anzeigen lassen.
__________________
Gruß Torsten!
|
|
|
24.09.2007, 10:59
|
#8
|
|
TP-Insider
Registriert seit: Sep 2006
Ort: South of Heaven
|
Torsten, Du bekommst da was in´n Tüdel … - IPTC
- Exif
Exif-Funktionen in PHP
__________________
Mein Skateboard ist wichtiger als Deutschland.
|
|
|
24.09.2007, 11:45
|
#9
|
|
TP-Moderator
Registriert seit: Jan 2004
Ort: Marbach
|
Vielen Dank Ingo - da habe ich wohl in der Tat etwas verwechselt 
__________________
Gruß Torsten!
|
|
|
24.09.2007, 11:55
|
#10
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Hier was zu Exif (nochmals überarbeitet):
PHP-Code:
<?php function bruch($value) { $val = explode('/', $value); return $val = $val[0] / $val[1]; }
function bruch2($value) { $val = explode('/', $value); if($val[0]%10 == 0){ $val[1] = $val[1] / $val[0]; $val[0] = $val[0] / $val[0]; return $val[0].'/'.$val[1]; } else if($val[0] > $val[1]){ return $val[0] / $val[1]; } else return $value; }
function getEXIF($image) { $exif = exif_read_data($image, 0, true); foreach ($exif as $key => $section){ if($key = 'EXIF'){ $exifData = array(); foreach ($section as $name => $val) { if($name == 'FNumber') $exifData[] = "Blende: ".bruch($val)."<br />\n"; if($name == 'ExposureTime') $exifData[] = "Verschlusszeit: ".bruch2($val)." s<br />\n"; if($name == 'FocalLength') $exifData[] = | | |