SetaPDF
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 12.09.2007, 13:03   #1
TP-Moderator
 
Benutzerbild von StephanF
 
Registriert seit: Feb 2003
Ort: Erfurt
StephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKE

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($bildtrue); 
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
StephanF ist offline   Mit Zitat antworten
Linktipp

Alt 13.09.2007, 12:13   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Vielen Dank.

vielleicht noch ganz nützlich hierzu:
http://www.pixafe.com/hilfe/iptc.htm
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist gerade online   Mit Zitat antworten
Alt 13.09.2007, 17:52   #3
TP-Specialist
 
Benutzerbild von Stefan
 
Registriert seit: May 2005
Ort: Bad Saulgau
Stefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine UserStefan lebt für das TP und seine User
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
Stefan ist offline   Mit Zitat antworten
Alt 22.09.2007, 02:50   #4
jph
TP-Veteran
 
Benutzerbild von jph
 
Registriert seit: Apr 2001
Ort: Münster und gerade aus Brisbane
jph ist auf einem guten Weg
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
__________________
Internetprojekte & Webdesign
www.janheck.de
post@janheck.de
jph ist offline   Mit Zitat antworten
Alt 22.09.2007, 08:03   #5
TP-Moderator
 
Benutzerbild von StephanF
 
Registriert seit: Feb 2003
Ort: Erfurt
StephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKEStephanF ist ein richtiges Arbeitstier - DANKE
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!!
StephanF ist offline   Mit Zitat antworten
Alt 22.09.2007, 09:11   #6
TP-Insider
 
Registriert seit: Nov 2006
Ort: Lübeck
Guin hilft, wo's gehtGuin hilft, wo's geht
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); 
Guin ist offline   Mit Zitat antworten
Alt 24.09.2007, 09:53   #7
TP-Moderator
 
Benutzerbild von Torsten
 
Registriert seit: Jan 2004
Ort: Marbach
Torsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine User
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!
Torsten ist offline   Mit Zitat antworten
Alt 24.09.2007, 10:59   #8
TP-Insider
 
Benutzerbild von ingozen
 
Registriert seit: Sep 2006
Ort: South of Heaven
ingozen lebt für das TP und seine Useringozen lebt für das TP und seine Useringozen lebt für das TP und seine Useringozen lebt für das TP und seine Useringozen lebt für das TP und seine Useringozen lebt für das TP und seine Useringozen lebt für das TP und seine User
Torsten, Du bekommst da was in´n Tüdel …
  1. IPTC
  2. Exif

Exif-Funktionen in PHP
__________________
Mein Skateboard ist wichtiger als Deutschland.
ingozen ist offline   Mit Zitat antworten
Alt 24.09.2007, 11:45   #9
TP-Moderator
 
Benutzerbild von Torsten
 
Registriert seit: Jan 2004
Ort: Marbach
Torsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine UserTorsten lebt für das TP und seine User
Vielen Dank Ingo - da habe ich wohl in der Tat etwas verwechselt
__________________
Gruß Torsten!
Torsten ist offline   Mit Zitat antworten
Alt 24.09.2007, 11:55   #10
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
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($image0true);
    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[] =