[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / gis / inc / iptc.php
1 <?php
2
3 if (!defined('_ECRIRE_INC_VERSION')) return;
4
5 //#############################################################################################
6 //##############################################################################################
7
8 /* INFOS SUR LE FICHIER
9
10 Nom : iptc.class.php
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
13
14 FIN INFOS SUR LE FICHIER
15
16
17 INFOS SUR LA CLASSE 'class_iptc'
18
19 REFERENCES : Développée le 04 Octobre 02 par Arica Alex avec l'aide de Thies C. Arntzen
20
21 ROLE : permet de manipuler les iptc d'une image
22
23 VARIABLES :
24 - $h_codesIptc
25 - $h_cheminFichier
26 - $h_iptcData
27
28 METHODES :
29 - fct_lireIPTC
30 - fct_ecrireIPTC
31 - fct_iptcMaketag
32
33 FIN INFOS SUR LA CLASSE
34
35 */
36
37
38 class class_IPTC
39 {
40
41
42
43 /* VARIABLES statics */
44
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 */
48
49 /* FIN VARIABLES statics
50
51
52
53
54
55
56
57
58
59 -------------------------------------------------------------------------------------------------------
60
61
62
63
64
65
66
67
68 INFOS SUR LA FONCTION
69
70 ROLE : constructeur
71 FONCTION : class_IPTC($cheminImg)
72 DESCRIPTION DES PARAMETRES :
73 - $cheminImg = (chaine) le chemin complet du fichier d'image à traiter
74
75 FIN INFOS SUR LA FONCTION */
76
77
78 function class_IPTC($cheminImg)
79 {
80
81 // Inititalisations
82
83 // Les valeurs IPTC pouvant être manipulées
84 $this -> h_codesIptc = array("005" => "objectName",
85 "007" => "editStatus",
86 "010" => "priority",
87 "015" => "category",
88 "020" => "supplementalCategory",
89 "022" => "fixtureIdentifier",
90 "025" => "keywords",
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",
102 "080" => "byline",
103 "085" => "bylineTitle",
104 "090" => "city",
105 "095" => "provinceState",
106 "100" => "countryCode",
107 "101" => "country",
108 "103" => "originalTransmissionReference",
109 "105" => "headline",
110 "110" => "credit",
111 "115" => "source",
112 "116" => "copyright",
113 "120" => "caption",
114 "121" => "localCaption",
115 "122" => "captionWriter");
116
117
118 // On enregistre le chemin de l'image à traiter
119 $this -> h_cheminImg = $cheminImg;
120
121
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"];
126
127 }
128
129 /* FIN FONCTION class_IPTC();
130
131
132
133
134
135
136
137
138
139 -------------------------------------------------------------------------------------------------------
140
141
142
143
144
145
146
147
148 INFOS SUR LA FONCTION
149
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
153
154 FIN INFOS SUR LA FONCTION */
155
156 function fct_lireIPTC()
157 {
158 $tblIPTC = iptcparse($this -> h_iptcData);
159
160 while( (is_array($tblIPTC)) && (list($codeIPTC, $valeurIPTC) = each($tblIPTC)) )
161 {
162 $codeIPTC = str_replace("2#", "", $codeIPTC);
163
164 if( ($codeIPTC != "000") && ($codeIPTC != "140") && $this->h_codesIptc["$codeIPTC"])
165 {
166 while(list($index, ) = each($valeurIPTC))
167 {
168 if ($this->h_codesIptc["$codeIPTC"]) $codeIPTC = $this->h_codesIptc["$codeIPTC"];
169 $lesIptc[$codeIPTC] .= $valeurIPTC[$index].$retourLigne;
170 $retourLigne = "\n";
171 }
172 }
173 }
174
175 if(is_array($lesIptc)) return $lesIptc;
176 else return false;
177 }
178
179 /* FIN FONCTION fct_lireIPTC();
180
181
182
183
184
185
186
187
188 -------------------------------------------------------------------------------------------------------
189
190
191
192
193
194
195
196
197 INFOS SUR LA FONCTION
198
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
206
207 FIN INFOS SUR LA FONCTION */
208
209 function fct_ecrireIPTC($tblIPTC_util, $cheminImgAModifier = "")
210 {
211
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;
214
215
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;
218
219
220 // On récupère l'IPTC du fichier image courant
221 $tblIPTC_old = iptcparse($this -> h_iptcData);
222
223
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))
226 {
227
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();
231
232
233 // On remplace les valeurs des IPTC demandées
234 if (is_array($tblIPTC_util[$codeIPTC]))
235 {
236 if (count($tblIPTC_util[$codeIPTC])) $valIPTC_new = $tblIPTC_util[$codeIPTC];
237
238 }else{
239
240 $val = trim(strval($tblIPTC_util[$codeIPTC]));
241 if (strlen($val)) $valIPTC_new[0] = $val;
242 }
243
244
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)
247 {
248 $iptcData_new .= $this -> fct_iptcMaketag(2, $codeIPTC, $val);
249 }
250
251 }
252
253
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);
257
258
259 // Ecriture dans le fichier image
260 $idFichier = fopen($cheminImgAModifier, "wb");
261 fwrite($idFichier, $contenuImage);
262 fclose($idFichier);
263
264
265 return true;
266
267 }
268
269 /* FIN FONCTION fct_ecrireIPTC();
270
271
272
273
274
275
276
277
278 -------------------------------------------------------------------------------------------------------
279
280
281
282
283
284
285
286
287 INFOS SUR LA FONCTION
288
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
297
298 FIN INFOS SUR LA FONCTION */
299
300 function fct_iptcMaketag($rec, $dat, $val)
301 {
302 $len = strlen($val);
303 if ($len < 0x8000)
304 return chr(0x1c).chr($rec).chr($dat).
305 chr($len >> 8).
306 chr($len & 0xff).
307 $val;
308 else
309 return chr(0x1c).chr($rec).chr($dat).
310 chr(0x80).chr(0x04).
311 chr(($len >> 24) & 0xff).
312 chr(($len >> 16) & 0xff).
313 chr(($len >> 8 ) & 0xff).
314 chr(($len ) & 0xff).
315 $val;
316 }
317
318 // FIN FONCTION fct_iptcMaketag();
319
320
321
322
323
324 }
325
326 /* Fin class_IPTC */
327
328 ?>