h_codesIptc = array("005" => "objectName", "007" => "editStatus", "010" => "priority", "015" => "category", "020" => "supplementalCategory", "022" => "fixtureIdentifier", "025" => "keywords", "030" => "releaseDate", "035" => "releaseTime", "040" => "specialInstructions", "045" => "referenceService", "047" => "referenceDate", "050" => "referenceNumber", "055" => "createdDate", "060" => "createdTime", "065" => "originatingProgram", "070" => "programVersion", "075" => "objectCycle", "080" => "byline", "085" => "bylineTitle", "090" => "city", "095" => "provinceState", "100" => "countryCode", "101" => "country", "103" => "originalTransmissionReference", "105" => "headline", "110" => "credit", "115" => "source", "116" => "copyright", "120" => "caption", "121" => "localCaption", "122" => "captionWriter"); // On enregistre le chemin de l'image à traiter $this -> h_cheminImg = $cheminImg; // On extrait les données encodées de l'iptc // getimagesize($this -> h_cheminImg, &$info); //avant,marche pas sinon getimagesize($this -> h_cheminImg, $info); //marche sans le & $this -> h_iptcData = $info["APP13"]; } /* FIN FONCTION class_IPTC(); ------------------------------------------------------------------------------------------------------- INFOS SUR LA FONCTION ROLE : lit les IPTC d'une image et les renvoie dans un tableau associatif FONCTION : fct_lireIPTC() TYPE RETOURNE : chaine sous forme de tableau associatif FIN INFOS SUR LA FONCTION */ function fct_lireIPTC() { $tblIPTC = iptcparse($this -> h_iptcData); while( (is_array($tblIPTC)) && (list($codeIPTC, $valeurIPTC) = each($tblIPTC)) ) { $codeIPTC = str_replace("2#", "", $codeIPTC); if( ($codeIPTC != "000") && ($codeIPTC != "140") && $this->h_codesIptc["$codeIPTC"]) { while(list($index, ) = each($valeurIPTC)) { if ($this->h_codesIptc["$codeIPTC"]) $codeIPTC = $this->h_codesIptc["$codeIPTC"]; $lesIptc[$codeIPTC] .= $valeurIPTC[$index].$retourLigne; $retourLigne = "\n"; } } } if(is_array($lesIptc)) return $lesIptc; else return false; } /* FIN FONCTION fct_lireIPTC(); ------------------------------------------------------------------------------------------------------- INFOS SUR LA FONCTION ROLE : écrit des IPTC dans le fichier image FONCTION : fct_ecrireIPTC() DESCRIPTION DES PARAMETRES : - $tblIPTC_util = (tableau associatif) contient les codes des champs IPTC à modifier associés leur valeur - $cheminImgAModifier = (chaine) stocke le chemin de l'image dont l'IPTC est à modifier ; s'il est null le chemin sera celui contenu dans '$this -> h_cheminImg' TYPE RETOURNE : booléen FIN INFOS SUR LA FONCTION */ function fct_ecrireIPTC($tblIPTC_util, $cheminImgAModifier = "") { // La tableau devant contenir des IPTC est vide ou n'est pas un tableau associatif if( (empty($tblIPTC_util)) || (!is_array($tblIPTC_util)) ) return false; // Si le chemin de l'image à modifier est vide alors on lui spécifie le chemin par défaut if(empty($cheminImgAModifier)) $cheminImgAModifier = $this -> h_cheminImg; // On récupère l'IPTC du fichier image courant $tblIPTC_old = iptcparse($this -> h_iptcData); // On prélève le tableau contenant les codes et les valeurs des IPTC de la photo while(list($codeIPTC, $codeLibIPTC) = each($this -> h_codesIptc)) { // On teste si les données originelles correspondant au code en cours sont présents if (is_array($tblIPTC_old["2#".$codeIPTC])) $valIPTC_new = $tblIPTC_old["2#".$codeIPTC]; else $valIPTC_new = array(); // On remplace les valeurs des IPTC demandées if (is_array($tblIPTC_util[$codeIPTC])) { if (count($tblIPTC_util[$codeIPTC])) $valIPTC_new = $tblIPTC_util[$codeIPTC]; }else{ $val = trim(strval($tblIPTC_util[$codeIPTC])); if (strlen($val)) $valIPTC_new[0] = $val; } // On crée un nouveau iptcData à partir de '$tblIPTC_new' qui contient le code et la valeur de l'IPTC foreach($valIPTC_new as $val) { $iptcData_new .= $this -> fct_iptcMaketag(2, $codeIPTC, $val); } } /* A partir du nouveau iptcData contenu dans '$iptcData_new' on crée grâce à la fonction 'iptcembed()' le contenu binaire du fichier image avec le nouveau IPTC inclu */ $contenuImage = iptcembed($iptcData_new, $this -> h_cheminImg); // Ecriture dans le fichier image $idFichier = fopen($cheminImgAModifier, "wb"); fwrite($idFichier, $contenuImage); fclose($idFichier); return true; } /* FIN FONCTION fct_ecrireIPTC(); ------------------------------------------------------------------------------------------------------- INFOS SUR LA FONCTION ROLE : permet de transformer une valeur de d'IPTC (code + valeur) en iptcData AUTEUR : Thies C. Arntzen FONCTION : fct_iptcMaketag($rec, $dat, $val) DESCRIPTION DES PARAMETRES : - $rec = (entier) toujours à mettre à 2 - $dat = (chaine) le code de l'IPTC (de type '110' et non '2#110') - $val = (chaine) la valeur de l'IPTC TYPE RETOURNE : booléen FIN INFOS SUR LA FONCTION */ function fct_iptcMaketag($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; } // FIN FONCTION fct_iptcMaketag(); } /* Fin class_IPTC */ ?>