3 if (!defined('_ECRIRE_INC_VERSION')) return;
5 //#############################################################################################
6 //##############################################################################################
8 /* INFOS SUR LE FICHIER
11 Rôle : contient la classe permettant de gérer les IPTC d'un fichier image
12 Développeur(s) : Arica Alex, Thies C. Arntzen
14 FIN INFOS SUR LE FICHIER
17 INFOS SUR LA CLASSE 'class_iptc'
19 REFERENCES : Développée le 04 Octobre 02 par Arica Alex avec l'aide de Thies C. Arntzen
21 ROLE : permet de manipuler les iptc d'une image
33 FIN INFOS SUR LA CLASSE
43 /* VARIABLES statics */
45 var $h_codesIptc; /* $h_codesIptc : (tableau associatif) contient les codes des champs IPTC associés à un libellé */
46 var $h_cheminImg; /* $h_cheminImg : (chaine) contient le chemin complet du fichier d'image */
47 var $h_iptcData; /* $h_iptcData : (chaine) contient les données encodées de l'iptc de l'image */
49 /* FIN VARIABLES statics
59 -------------------------------------------------------------------------------------------------------
71 FONCTION : class_IPTC($cheminImg)
72 DESCRIPTION DES PARAMETRES :
73 - $cheminImg = (chaine) le chemin complet du fichier d'image à traiter
75 FIN INFOS SUR LA FONCTION */
78 function class_IPTC($cheminImg)
83 // Les valeurs IPTC pouvant être manipulées
84 $this -> h_codesIptc
= array("005" => "objectName",
85 "007" => "editStatus",
88 "020" => "supplementalCategory",
89 "022" => "fixtureIdentifier",
91 "030" => "releaseDate",
92 "035" => "releaseTime",
93 "040" => "specialInstructions",
94 "045" => "referenceService",
95 "047" => "referenceDate",
96 "050" => "referenceNumber",
97 "055" => "createdDate",
98 "060" => "createdTime",
99 "065" => "originatingProgram",
100 "070" => "programVersion",
101 "075" => "objectCycle",
103 "085" => "bylineTitle",
105 "095" => "provinceState",
106 "100" => "countryCode",
108 "103" => "originalTransmissionReference",
112 "116" => "copyright",
114 "121" => "localCaption",
115 "122" => "captionWriter");
118 // On enregistre le chemin de l'image à traiter
119 $this -> h_cheminImg
= $cheminImg;
122 // On extrait les données encodées de l'iptc
123 // getimagesize($this -> h_cheminImg, &$info); //avant,marche pas sinon
124 getimagesize($this -> h_cheminImg
, $info); //marche sans le &
125 $this -> h_iptcData
= $info["APP13"];
129 /* FIN FONCTION class_IPTC();
139 -------------------------------------------------------------------------------------------------------
148 INFOS SUR LA FONCTION
150 ROLE : lit les IPTC d'une image et les renvoie dans un tableau associatif
151 FONCTION : fct_lireIPTC()
152 TYPE RETOURNE : chaine sous forme de tableau associatif
154 FIN INFOS SUR LA FONCTION */
156 function fct_lireIPTC()
158 $tblIPTC = iptcparse($this -> h_iptcData
);
160 while( (is_array($tblIPTC)) && (list($codeIPTC, $valeurIPTC) = each($tblIPTC)) )
162 $codeIPTC = str_replace("2#", "", $codeIPTC);
164 if( ($codeIPTC != "000") && ($codeIPTC != "140") && $this->h_codesIptc
["$codeIPTC"])
166 while(list($index, ) = each($valeurIPTC))
168 if ($this->h_codesIptc
["$codeIPTC"]) $codeIPTC = $this->h_codesIptc
["$codeIPTC"];
169 $lesIptc[$codeIPTC] .= $valeurIPTC[$index].$retourLigne;
175 if(is_array($lesIptc)) return $lesIptc;
179 /* FIN FONCTION fct_lireIPTC();
188 -------------------------------------------------------------------------------------------------------
197 INFOS SUR LA FONCTION
199 ROLE : écrit des IPTC dans le fichier image
200 FONCTION : fct_ecrireIPTC()
201 DESCRIPTION DES PARAMETRES :
202 - $tblIPTC_util = (tableau associatif) contient les codes des champs IPTC à modifier associés leur valeur
203 - $cheminImgAModifier = (chaine) stocke le chemin de l'image dont l'IPTC est à modifier ; s'il est null
204 le chemin sera celui contenu dans '$this -> h_cheminImg'
205 TYPE RETOURNE : booléen
207 FIN INFOS SUR LA FONCTION */
209 function fct_ecrireIPTC($tblIPTC_util, $cheminImgAModifier = "")
212 // La tableau devant contenir des IPTC est vide ou n'est pas un tableau associatif
213 if( (empty($tblIPTC_util)) ||
(!is_array($tblIPTC_util)) ) return false;
216 // Si le chemin de l'image à modifier est vide alors on lui spécifie le chemin par défaut
217 if(empty($cheminImgAModifier)) $cheminImgAModifier = $this -> h_cheminImg
;
220 // On récupère l'IPTC du fichier image courant
221 $tblIPTC_old = iptcparse($this -> h_iptcData
);
224 // On prélève le tableau contenant les codes et les valeurs des IPTC de la photo
225 while(list($codeIPTC, $codeLibIPTC) = each($this -> h_codesIptc
))
228 // On teste si les données originelles correspondant au code en cours sont présents
229 if (is_array($tblIPTC_old["2#".$codeIPTC])) $valIPTC_new = $tblIPTC_old["2#".$codeIPTC];
230 else $valIPTC_new = array();
233 // On remplace les valeurs des IPTC demandées
234 if (is_array($tblIPTC_util[$codeIPTC]))
236 if (count($tblIPTC_util[$codeIPTC])) $valIPTC_new = $tblIPTC_util[$codeIPTC];
240 $val = trim(strval($tblIPTC_util[$codeIPTC]));
241 if (strlen($val)) $valIPTC_new[0] = $val;
245 // On crée un nouveau iptcData à partir de '$tblIPTC_new' qui contient le code et la valeur de l'IPTC
246 foreach($valIPTC_new as $val)
248 $iptcData_new .= $this -> fct_iptcMaketag(2, $codeIPTC, $val);
254 /* A partir du nouveau iptcData contenu dans '$iptcData_new' on crée grâce à la fonction 'iptcembed()'
255 le contenu binaire du fichier image avec le nouveau IPTC inclu */
256 $contenuImage = iptcembed($iptcData_new, $this -> h_cheminImg
);
259 // Ecriture dans le fichier image
260 $idFichier = fopen($cheminImgAModifier, "wb");
261 fwrite($idFichier, $contenuImage);
269 /* FIN FONCTION fct_ecrireIPTC();
278 -------------------------------------------------------------------------------------------------------
287 INFOS SUR LA FONCTION
289 ROLE : permet de transformer une valeur de d'IPTC (code + valeur) en iptcData
290 AUTEUR : Thies C. Arntzen
291 FONCTION : fct_iptcMaketag($rec, $dat, $val)
292 DESCRIPTION DES PARAMETRES :
293 - $rec = (entier) toujours à mettre à 2
294 - $dat = (chaine) le code de l'IPTC (de type '110' et non '2#110')
295 - $val = (chaine) la valeur de l'IPTC
296 TYPE RETOURNE : booléen
298 FIN INFOS SUR LA FONCTION */
300 function fct_iptcMaketag($rec, $dat, $val)
304 return chr(0x1c).chr($rec).chr($dat).
309 return chr(0x1c).chr($rec).chr($dat).
311 chr(($len >> 24) & 0xff).
312 chr(($len >> 16) & 0xff).
313 chr(($len >> 8 ) & 0xff).
318 // FIN FONCTION fct_iptcMaketag();