TobiasKlepp: iptcembed

Hallo,

ich bin auf der Suche nach einer Lösung für mein IPTC-problem. Ich kann auf meinem Server problemlos IPTC-Informationen auslesen. Schreiben klappt jedoch überhaupt nicht. Ich habe alle im Internet zu findenden Script ausgetestet. Das Ergebnis ist jedoch immer das gleiche. Im neuen Bild sind keine IPTC-Informationen mehr enthalten. Mir fällt dazu einfach nichts mehr ein. Vielleicht hat jemand hier auch schon mit diesem Thema Erfahrung und kann mir weiterhelfen.

Hier mein Test-Script:

<?php
// original file name
$image_name_old = "test.jpg";

// New file name
$image_name_new = "test2.jpg";

// Reads the IPTC text in to the array '$iptc'
// The number after the '#' is the IPTC field
// Ex: $iptc["2#120"][0] is Caption
// $iptc["2#055"][0]; is Creation date
$size = GetImageSize ("$image_name_old",&$info);
$iptc_old = iptcparse ($info["APP13"]);

// Adding or replacing IPTC text
   // This ex. replace the original category or create it if it dos not exist
   $iptc_old["2#015"][0] = "Sport";
   // .. and adding more text to the original caption
   $iptc_old["2#120"][0] .= " More caption text";

// Making the new IPTC string
   foreach (array_keys($iptc_old) as $s){
     // Finds the IPTC numbers
     $tag = str_replace("2#", "", $s);
     // Creating the string
     $iptc_new .= iptc_maketag(2, $tag, $iptc_old[$s][0]);
   }

// The original file and the new IPTC Text into $content
// Mode 0 - puts the image file into $content
// Mode 1 - puts the image file into $content and directly to the web client
// Mode 2 - puts the image file to web client
$mode = 0;
$content = iptcembed($iptc_new, $image_name_old, $mode);

// writes the new file
$fp = fopen($image_name_new, "w");
fwrite($fp, $content);
fclose($fp);

// Function to format the new IPTC text, (thanks to Thies C. Arntzen)
function iptc_maketag($rec,$dat,$val){
         $len = strlen($val);
         if ($len < 0x8000)
                 return chr(0x1c).chr($rec).chr($dat).
                 chr($len >> 8).
                 chr($len & 0xff).
                 $val;
         else
                 return chr(0x1c).chr($rec).chr($dat).
                 chr(0x80).chr(0x04).
                 chr(($len >> 24) & 0xff).
                 chr(($len >> 16) & 0xff).
                 chr(($len >> 8 ) & 0xff).
                 chr(($len ) & 0xff).
                 $val;
}

?>

Bei mir tut es leider nicht. das neue Bild enthält keine IPTC-Informationen.

Gruß Tobias Klepp

  1. Hallo Tobias,

    ich bin auf der Suche nach einer Lösung für mein IPTC-problem. Ich kann auf meinem Server problemlos IPTC-Informationen auslesen. Schreiben klappt jedoch überhaupt nicht. Ich habe alle im Internet zu findenden Script ausgetestet. Das Ergebnis ist jedoch immer das gleiche. Im neuen Bild sind keine IPTC-Informationen mehr enthalten. Mir fällt dazu einfach nichts mehr ein. Vielleicht hat jemand hier auch schon mit diesem Thema Erfahrung und kann mir weiterhelfen.

    Die Funktion ist noch nicht dokumentiert und scheint allem Anschein nach auch nur in Ausnahmefällen zu funktionieren. Aber vielleicht hilft dir ja Image/JPEG weiter. Es greift im Gegensatz zum Pear Paket Image_IPTC nicht auf iptcembed() zu, benötigt aber trotzdem eine funktionsfähige PEAR-Installation.

    MffG
    EisFuX