Subversion Repositories eFlore/Applications.cel

Rev

Rev 632 | Rev 988 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 632 Rev 970
1
<?php
1
<?php
2
/**
2
/**
3
 * Classe d'extraction de metadonnées afin de les mettre dans 
3
 * Classe d'extraction de metadonnées afin de les mettre dans 
4
 * un tableau au format du cel
4
 * un tableau au format du cel
5
 * Encodage en entrée : utf8
5
 * Encodage en entrée : utf8
6
 * Encodage en sortie : utf8
6
 * Encodage en sortie : utf8
7
 *
7
 *
8
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
8
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
9
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
 * @version $Id$
11
 * @version $Id$
12
 */
12
 */
13
class ExtracteurMetadonnees {
13
class ExtracteurMetadonnees {
14
 
14
 
15
	 public function extraireMetadonnees($chemin_fichier)
15
	 public function extraireMetadonnees($chemin_fichier)
16
	 {
16
	 {
17
	 
-
 
18
		$iptc = $this->extraireIptc($chemin_fichier) ;
17
	 	
19
		$exif = $this->extraireExif($chemin_fichier) ;
-
 
20
		
-
 
21
		$meta = array_merge($exif,$iptc);
-
 
22
		
-
 
23
		$this->initialiserSectionsSupplementaires(&$meta) ;
18
	 	$metadonnees = $this->decoderMetaDonnees($chemin_fichier);
24
		
-
 
25
		return $meta ;
-
 
26
	 }
-
 
27
	 
-
 
28
	/**
-
 
29
	* Extraction des metadonnées exif 
-
 
30
	**/
-
 
31
	public function extraireExif($chemin_fichier)
-
 
32
	{
-
 
33
		$exif_tab = $this->initialiserTableauExif () ;
-
 
34
	
-
 
35
		$exif = @exif_read_data($chemin_fichier,"EXIF,COMPUTED,IFD0,FILE,COMMENT",true,false);
-
 
36
 
-
 
37
		if ($exif) {
-
 
38
			foreach ($exif as $key => $section) 
-
 
39
			{
-
 
40
			    foreach ($section as $name => $val) 
-
 
41
			    {
-
 
42
					if ($name != "MakerNote")
-
 
43
					{
-
 
44
							$this->decoderValeurExif ($name, $val ,&$exif_tab) ;
-
 
45
					}
-
 
46
			    }
19
	 	
47
			}
20
		return $metadonnees ;
-
 
21
	 }
-
 
22
	 
48
		}
23
	private function peutUtiliserExifTool() {
49
		
-
 
50
		return $exif_tab ;
-
 
51
	}
-
 
52
	
-
 
53
	/**
-
 
54
	* Extraction des metadonnées iptc 
-
 
55
	**/
-
 
56
	public function extraireIptc($chemin_fichier)
-
 
57
	{
-
 
58
		$iptc_tab = $this->initialiserTableauIptc() ;
-
 
59
		
-
 
60
		// geimagesize renvoie le infos iptc dans le tableau info
-
 
61
		$size = getimagesize($chemin_fichier, $info);
-
 
62
		// s'il existe
-
 
63
		if (isset($info["APP13"])) 
-
 
64
		{
-
 
65
			// on parse les donnees
-
 
66
			$iptc = iptcparse($info["APP13"]);
-
 
67
			if ($iptc) {
-
 
68
				// et on les analyse
-
 
69
				foreach ($iptc as $marker => $section)
-
 
70
				{
-
 
71
					foreach ($section as $nom => $val)
-
 
72
					{
-
 
73
						// pour remplir le tableau de donnees
-
 
74
						$this->decoderValeurIptc($marker, $val ,&$iptc_tab) ;
-
 
75
					}
-
 
76
				}
-
 
77
			}
-
 
78
		}
-
 
79
		
-
 
80
		return $iptc_tab ;
-
 
81
	}
-
 
82
	
-
 
83
	/**
-
 
84
	* Stocke une valeur de metadonnées exif dans le champ du tableau correspondant
-
 
85
	* @param String $nom nom de la valeur
24
		// TODO indiquer ceci dans un fichier de config
86
	* @param String $val valeur
-
 
87
	* @param String $data référence vers le tableau où la donnée sera stockée 
-
 
88
	**/
-
 
89
	private function decoderValeurExif($nom, $val ,$data_tab)
-
 
90
	{	
-
 
91
		switch ($nom)
-
 
92
		{
-
 
93
		
-
 
94
			case "Height" :
-
 
95
			$data_tab['ci_meta_height'] = $val  ;
-
 
96
			break ;
-
 
97
			
-
 
98
			case "Width" :
-
 
99
			$data_tab['ci_meta_width'] = $val  ;
-
 
100
			break ;
-
 
101
			
-
 
102
			case "Make" :
-
 
103
				$data_tab['ci_meta_make'] = $val  ;
-
 
104
			break ;
-
 
105
			
-
 
106
			case "Model" :
-
 
107
				$data_tab['ci_meta_model'] = $val ;
-
 
108
			break ;
-
 
109
			
-
 
110
			case "XResolution" :
-
 
111
				$data_tab['ci_meta_x_resolution'] = $val  ;
-
 
112
			break ;
-
 
113
			
-
 
114
			case "YResolution" :
-
 
115
				$data_tab['ci_meta_y_resolution'] = $val ;
-
 
116
			break ;	
-
 
117
				
-
 
118
			case "DateTimeOriginal" :
-
 
119
				$data_tab['ci_meta_date_time'] = $val  ;
-
 
120
			break ;
-
 
121
			
-
 
122
			case "GPS" :
-
 
123
				$data_tab['ci_meta_gps'] = $val  ;
-
 
124
			break ;
-
 
125
			
-
 
126
			case "UserComment" :
-
 
127
				$data_tab['ci_meta_user_comment'] = '"'.$val.'"' ;
-
 
128
			break ;
-
 
129
			
-
 
130
			case "ExposureTime" :
-
 
131
				$data_tab['ci_meta_exif_exposure_time'] = $val ;
-
 
132
			break ;
-
 
133
			
-
 
134
			case "FNumber" :
-
 
135
				$data_tab['ci_meta_exif_f_number'] = $val  ;
-
 
136
			break ;
-
 
137
			
-
 
138
			case "ExifVersion" :
-
 
139
				$data_tab['ci_meta_exif_exif_version'] = $val  ;
-
 
140
			break ;
-
 
141
			
-
 
142
			case "CompressedBitsPerPixel" :
-
 
143
				$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = $val  ;
-
 
144
			break ;
-
 
145
			
-
 
146
			case "ShutterSpeedValue" :
-
 
147
				$data_tab['ci_meta_exif_shutter_speed_value'] = $val  ;
-
 
148
			break ;
-
 
149
			
-
 
150
			case "ApertureValue" :
-
 
151
				$data_tab['ci_meta_exif_aperture_value'] = $val  ;
-
 
152
			break ;
-
 
153
			
-
 
154
			case "ExposureBiasValue" :
-
 
155
				$data_tab['ci_meta_exif_exposure_bias_value'] = $val  ;
-
 
156
			break ;
-
 
157
			
-
 
158
			case "MaxApertureValue" :
-
 
159
				$data_tab['ci_meta_exif_max_aperture_value'] = $val  ;
-
 
160
			break ;
-
 
161
			
-
 
162
			case "MeteringMode" :
-
 
163
				$data_tab['ci_meta_exif_metering_mode'] = $val  ;
-
 
164
			break ;
-
 
165
			
-
 
166
			case "LightSource" :
-
 
167
				$data_tab['ci_meta_exif_light_source'] = $val  ;
-
 
168
			break ;
-
 
169
			
-
 
170
			case "Flash" :
-
 
171
				$data_tab['ci_meta_exif_flash'] = $val  ;
-
 
172
			break ;
-
 
173
			
-
 
174
			case "FocalLength" :
-
 
175
				$data_tab['ci_meta_exif_focal_length'] = $val  ;
-
 
176
			break ;
-
 
177
			
-
 
178
			case "FlashpixVersion" :
-
 
179
				$data_tab['ci_meta_exif_flash_pix_version'] = $val  ;
-
 
180
			break ;
-
 
181
			
-
 
182
			case "ColorSpace" :
-
 
183
				$data_tab['ci_meta_exif_color_space'] = $val  ;
-
 
184
			break ;
-
 
185
			
-
 
186
			case "InteroperabilityOffset" :
-
 
187
				$data_tab['ci_meta_exif_interoperability_offset'] = $val  ;
-
 
188
			break ;
-
 
189
			
-
 
190
			case "FocalPlaneXResolution" :
-
 
191
				$data_tab['ci_meta_exif_focal_plane_x_resolution'] = $val  ;
-
 
192
			break ;
-
 
193
			
-
 
194
			case "FocalPlaneYResolution" :
-
 
195
				$data_tab['ci_meta_exif_focal_plane_y_resolution'] = $val  ;
-
 
196
			break ;
-
 
197
			
-
 
198
			case "FocalPlaneResolutionUnit" :
-
 
199
				$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = $val  ;
-
 
200
			break ;
-
 
201
			
-
 
202
			case "SensingMethod" :
-
 
203
				$data_tab['ci_meta_exif_sensing_method'] = $val  ;
-
 
204
			break ;
-
 
205
			
-
 
206
			case "FileSource" :
-
 
207
				$data_tab['ci_meta_exif_file_source'] = $val  ;
-
 
208
			break ;
-
 
209
			
-
 
210
			case "CustomRendered" :
-
 
211
				$data_tab['ci_meta_exif_custom_rendered'] = $val  ;
-
 
212
			break ;
-
 
213
			
-
 
214
			case "ExposureMode" :
-
 
215
				$data_tab['ci_meta_exif_exposure_mode'] = $val  ;
-
 
216
			break ;
-
 
217
			
-
 
218
			case "WhiteBalance" :
-
 
219
				$data_tab['ci_meta_exif_white_balance'] = $val  ;
-
 
220
			break ;
-
 
221
			
-
 
222
			case "DigitalZoomRatio" :
-
 
223
				$data_tab['ci_meta_exif_digital_zoom_ratio'] = $val  ;
-
 
224
			break ;
-
 
225
			
-
 
226
			case "SceneCaptureType" :
-
 
227
				$data_tab['ci_meta_exif_scene_capture_type'] = $val  ;
-
 
228
			break ;
-
 
229
			
-
 
230
			case "GainControl" :
-
 
231
				$data_tab['ci_meta_exif_gain_control'] = $val  ;
-
 
232
			break ;
-
 
233
			
-
 
234
			case "Contrast" :
-
 
235
				$data_tab['ci_meta_exif_contrast'] = $val  ;
-
 
236
			break ;
-
 
237
			
-
 
238
			case "Saturation" :
-
 
239
				$data_tab['ci_meta_exif_saturation'] = $val  ;
-
 
240
			break ;
-
 
241
			
-
 
242
			case "Sharpness" :
-
 
243
				$data_tab['ci_meta_exif_sharpness'] = $val  ;
-
 
244
			break ;
-
 
245
			
-
 
246
			case "SubjectDistanceRange" :
-
 
247
				$data_tab['ci_meta_exif_subject_distance_range'] = $val  ;
-
 
248
			break ;
-
 
249
			
-
 
250
			default :
-
 
251
				$data_tab['ci_meta_exif_autres'] .= $nom.":".$val.";" ;
-
 
252
		}	
-
 
253
	}
-
 
254
	
-
 
255
	/**
-
 
256
	* Stocke une valeur de metadonnées iptc dans le champ du tableau correspondant
-
 
257
	* @param String $nom nom de la valeur
-
 
258
	* @param String $val valeur
-
 
259
	* @param String $data référence vers le tableau où la donnée sera stockée
-
 
260
	**/
-
 
261
	private function decoderValeurIptc($nom, $val ,$data_tab)
-
 
262
	{	
-
 
263
		switch($nom)
-
 
264
		{
-
 
265
			// mots cles iptc
-
 
266
			case "2#005" :
-
 
267
				$data_tab['ci_meta_iptc_category'] = $val ;
-
 
268
			break;
-
 
269
			
-
 
270
			case "2#025" :
-
 
271
				$data_tab['ci_meta_iptc_mots_cles'] = $val ;
-
 
272
			break;
-
 
273
			
-
 
274
			// champ by line
-
 
275
			case "2#080" :
-
 
276
				$data_tab['ci_meta_iptc_by_line']  = $val  ;
-
 
277
			break ;
-
 
278
			
-
 
279
			// champ by line titre
-
 
280
			case "2#085" :
-
 
281
				$data_tab['ci_meta_iptc_by_line_title'] = $val  ;
-
 
282
			break ;
-
 
283
			
-
 
284
			// ville
-
 
285
			case "2#090" :
-
 
286
				$data_tab['ci_meta_iptc_city'] = $val  ;
-
 
287
			break ;
-
 
288
			
-
 
289
			// sous location
-
 
290
			case "2#092" :
-
 
291
				$data_tab['ci_meta_iptc_sub_location'] = $val ;
-
 
292
			break ;
-
 
293
			
-
 
294
			// etat (pour les us)
-
 
295
			case "2#095" :
-
 
296
				$data_tab['ci_meta_iptc_province_state'] = $val  ;
-
 
297
			break ;
-
 
298
			
-
 
299
			// code pays
-
 
300
			case "2#100" :
-
 
301
				$data_tab['ci_meta_iptc_country_primary_location_code'] = $val  ;
-
 
302
			break ;
-
 
303
			
-
 
304
			// code pays
-
 
305
			case "2#101" :
-
 
306
				$data_tab['ci_meta_iptc_country_name'] = $val  ;
-
 
307
			break ;
-
 
308
			
-
 
309
			// titre principal
-
 
310
			case "2#105" :
-
 
311
				$data_tab['ci_meta_iptc_headline'] = $val  ;
-
 
312
			break ;
-
 
313
			
-
 
314
			// credit
-
 
315
			case "2#110" :
-
 
316
				$data_tab['ci_meta_iptc_credit'] = $val  ;
-
 
317
			break ;
-
 
318
			
-
 
319
			// copyright
-
 
320
			case "2#116" :
-
 
321
				$data_tab['ci_meta_iptc_copyright_notice'] = $val  ;
-
 
322
			break ;
-
 
323
			
-
 
324
			// contact
-
 
325
			case "2#118" :
-
 
326
				$data_tab['ci_meta_iptc_contact'] = $val  ;
-
 
327
			break ;
-
 
328
			
-
 
329
			// autres (pour les champs qu'on ne prend pas en compte)
-
 
330
			default :
-
 
331
				$data_tab['ci_meta_iptc_autres'] .= $nom.":".$val.";" ;
-
 
332
		}
-
 
333
	}
-
 
334
	
-
 
335
	/**
-
 
336
	* Crée le tableau vide pour stocker les iptc pour le ce
-
 
337
	* 
-
 
338
	* @return array $data_tab référence vers le tableau où la donnée sera stockée
-
 
339
	* 
-
 
340
	**/
-
 
341
	private function initialiserTableauIptc()
-
 
342
	{	
-
 
343
		$data_tab = array() ;
-
 
344
		
-
 
345
		$data_tab['ci_meta_iptc_category'] = NULL ;
-
 
346
		
-
 
347
		$data_tab['ci_meta_iptc_mots_cles'] = NULL ;
-
 
348
			
25
		return file_exists('/usr/bin/exiftool') && is_executable('/usr/bin/exiftool');
349
		$data_tab['ci_meta_iptc_by_line']  = NULL ;
26
	}
-
 
27
	
-
 
28
	private function decoderMetadonnees($chemin_image) {
350
			
29
		
-
 
30
		$metadonnees = array();
-
 
31
		
-
 
32
		if($this->peutUtiliserExifTool()) {
351
		$data_tab['ci_meta_iptc_by_line_title'] = NULL ;
33
			
-
 
34
			$res = $this->decoderMetadonneesExifTool($chemin_image);
352
			
35
			$metadonnees['meta_exif'] = $this->convertirExifVersXML(&$res);
353
		$data_tab['ci_meta_iptc_city'] = NULL ;
36
			$metadonnees['meta_iptc'] = $this->convertirIptcVersXML(&$res);
354
			
37
			$metadonnees['meta_xmp'] = $this->convertirXmpVersXML(&$res);
355
		$data_tab['ci_meta_iptc_sub_location'] = NULL ;
-
 
356
			
-
 
357
		$data_tab['ci_meta_iptc_province_state'] = NULL ;
-
 
358
			
-
 
359
		$data_tab['ci_meta_iptc_country_primary_location_code'] = NULL ;
-
 
360
		
-
 
361
		$data_tab['ci_meta_iptc_country_name'] = NULL  ;
-
 
362
			
38
			$metadonnees['meta_makernote'] = $this->convertirMakernoteVersXML(&$res); 
363
		$data_tab['ci_meta_iptc_headline'] = NULL ;
-
 
364
			
-
 
365
		$data_tab['ci_meta_iptc_credit'] = NULL ;
-
 
366
			
-
 
367
		$data_tab['ci_meta_iptc_copyright_notice'] = NULL ;
-
 
368
			
-
 
369
		$data_tab['ci_meta_iptc_contact'] = NULL ;
39
			
370
			
40
			$metadonnees['appareil_fabriquant'] = $this->obtenirAppareilFabricant(&$res);
371
		$data_tab['ci_meta_iptc_autres'] .= " " ;
-
 
372
	
-
 
373
		return $data_tab ;		
-
 
374
	}
-
 
375
	
-
 
376
	/**
41
			$metadonnees['appareil_modele'] = $this->obtenirAppareilModele(&$res);
377
	* Crée le tableau vide pour stocker les exifs pour le cel
42
			
-
 
43
			$metadonnees['hauteur'] = $this->obtenirHauteur(&$res);
378
	* 
44
			$metadonnees['largeur'] = $this->obtenirLargeur(&$res);
-
 
45
			
379
	* @return array $data_tab référence vers le tableau où la donnée sera stockée
46
			$metadonnees['date_prise_de_vue'] = $this->obtenirDatePriseDeVue(&$res);
-
 
47
			
380
	* 
48
		} else {
381
	**/
49
			
382
	private function initialiserTableauExif()
50
		}
-
 
51
		
-
 
52
		return $metadonnees;
383
	{
53
	}
-
 
54
	
384
		$data_tab = array() ;
55
	private function obtenirAppareilFabricant($infos_meta) {
-
 
56
		
-
 
57
		$fabriquant = '';
385
	 
58
		
-
 
59
		if(isset($infos_meta['EXIF']['Make'])) {
386
		$data_tab['ci_meta_height'] = 0  ;
60
			$fabriquant = $infos_meta['EXIF']['Make']['valeur'];
-
 
61
		}	
387
			
62
		
-
 
63
		return $fabriquant;	
388
		$data_tab['ci_meta_width'] = 0  ;
64
	}
-
 
65
	
-
 
66
	private function obtenirAppareilModele($infos_meta) {
389
	 
67
		
-
 
68
		$modele = '';
390
		$data_tab['ci_meta_make'] = NULL ;
69
		
391
		
70
		if(isset($infos_meta['EXIF']['CameraModelName'])) {
-
 
71
			$modele = $infos_meta['EXIF']['CameraModelName']['valeur'];
392
		$data_tab['ci_meta_model'] = NULL ;
72
		}	
-
 
73
		
393
		
74
		return $modele;		
-
 
75
	}
394
		$data_tab['ci_meta_x_resolution'] = NULL ;
76
	
-
 
77
	private function obtenirHauteur($infos_meta) {
-
 
78
		$hauteur = '';
395
		
79
		
-
 
80
		if(isset($infos_meta['File']['ImageHeight'])) {
-
 
81
			$hauteur = $infos_meta['File']['ImageHeight']['valeur'];
-
 
82
		}	
-
 
83
		
-
 
84
		return $hauteur;		
-
 
85
	}
-
 
86
	
396
		$data_tab['ci_meta_y_resolution'] = NULL ;
87
	private function obtenirLargeur($infos_meta) {
-
 
88
		$largeur = '';
-
 
89
		
397
		
90
		if(isset($infos_meta['File']['ImageWidth'])) {
-
 
91
			$largeur = $infos_meta['File']['ImageWidth']['valeur'];
398
		$data_tab['ci_meta_date_time'] = NULL ;
92
		}	
-
 
93
		
-
 
94
		return $largeur;		
399
		
95
	}
-
 
96
	
-
 
97
	private function obtenirDatePriseDeVue($infos_meta) {
-
 
98
		
400
		$data_tab['ci_meta_gps'] = NULL ;
99
		$date = '';
-
 
100
		
401
	
101
		if(isset($infos_meta['EXIF']['DateTimeOriginal'])) {
402
		$data_tab['ci_meta_user_comment'] = NULL ;
102
			$date = $infos_meta['EXIF']['DateTimeOriginal']['valeur'];
403
	
103
		}	
-
 
104
		
-
 
105
		return $date;		
404
		$data_tab['ci_meta_exif_exposure_time'] = NULL ;
106
	}
405
	
107
	
-
 
108
	private function decoderMetadonneesExifTool($chemin_image) {
-
 
109
		$metadata = array();
-
 
110
		$res = exec('/usr/bin/exiftool -g -D '.$chemin_image, $metadata);	
-
 
111
		
-
 
112
		$metadata_decodees = array();
-
 
113
		
-
 
114
		$categorie = '';
406
		$data_tab['ci_meta_exif_f_number'] = NULL ;
115
		foreach($metadata as &$data) {
-
 
116
			if($this->estUnSeparateurCategorieExifTool($data)) {
407
	
117
				$categorie = trim(str_replace('----','',$data));
-
 
118
			} else {
-
 
119
				$data_decodee = $this->parserValeurMetadonneeExifTool($data);
-
 
120
				$cle_metadonnee = str_replace(' ', '', $data_decodee['cle']);
408
		$data_tab['ci_meta_exif_exif_version'] = NULL ;
121
				$metadata_decodees[$categorie][$cle_metadonnee] = $data_decodee;
-
 
122
			}
-
 
123
		}
-
 
124
				
-
 
125
		return $metadata_decodees;
409
	
126
	}
-
 
127
	
410
		$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = NULL ;
128
	private function estUnSeparateurCategorieExifTool($data) {
-
 
129
		return preg_match('^---- (.)* ----^',$data);	
-
 
130
	}
-
 
131
	
411
	
132
	private function parserValeurMetadonneeExifTool($data) {
-
 
133
		$cle_valeur = explode(':',$data);
-
 
134
		
-
 
135
		$valeur = '';
-
 
136
		if(count($cle_valeur) == 2) {
412
		$data_tab['ci_meta_exif_shutter_speed_value'] = NULL ;
137
			$valeur	= trim($cle_valeur[1]);
-
 
138
		}
413
	
139
		
-
 
140
		$id_cle = explode(' ',trim($cle_valeur[0]),2);
414
		$data_tab['ci_meta_exif_aperture_value'] = NULL ;
141
		
-
 
142
		$id_cle[1] = str_replace(array('-','/'),'',$id_cle[1]);
-
 
143
				
-
 
144
		$cle_id_valeur = array('cle' => $id_cle[1], 'id' => str_replace('-','',$id_cle[0]), 'valeur' => $valeur);
415
	
145
		return $cle_id_valeur;		
-
 
146
	}
-
 
147
	
416
		$data_tab['ci_meta_exif_exposure_bias_value'] = NULL ;
-
 
417
	
-
 
418
		$data_tab['ci_meta_exif_max_aperture_value'] = NULL ;
-
 
419
	
-
 
420
		$data_tab['ci_meta_exif_metering_mode'] = NULL ;
-
 
421
	
-
 
422
		$data_tab['ci_meta_exif_flash'] = NULL ;
-
 
423
		
-
 
424
		$data_tab['ci_meta_exif_light_source'] = NULL ;
-
 
425
	
-
 
426
		$data_tab['ci_meta_exif_focal_length'] = NULL ;
-
 
427
	
148
	private function convertirExifVersXML($donnees_meta) {
428
		$data_tab['ci_meta_exif_flash_pix_version'] = NULL ;
149
 
429
	
150
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
430
		$data_tab['ci_meta_exif_color_space'] = NULL ;
151
		$xml .= '<exif>';
431
	
152
		if (isset($donnees_meta['EXIF'])) {
432
		$data_tab['ci_meta_exif_interoperability_offset'] = NULL ;
153
			foreach ($donnees_meta['EXIF'] as $prop => &$valeur) {
433
	
154
				$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
434
		$data_tab['ci_meta_exif_focal_plane_x_resolution'] = NULL ;
155
			}
435
	
156
		}
436
		$data_tab['ci_meta_exif_focal_plane_y_resolution'] = NULL ;
157
		$xml .= '</exif>'."\n"."\n";
437
	
158
		
438
		$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = NULL ;
159
		return $xml;
439
	
160
	}
440
		$data_tab['ci_meta_exif_sensing_method'] = NULL ;
161
	
441
	
162
	private function convertirIptcVersXML($donnees_meta) {
442
		$data_tab['ci_meta_exif_file_source'] = NULL ;
163
		
443
			
164
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
444
		$data_tab['ci_meta_exif_custom_rendered'] = NULL ;
165
		$xml .= '<iptc>';
445
	
166
		if (isset($donnees_meta['IPTC'])) {
446
		$data_tab['ci_meta_exif_exposure_mode'] = NULL ;
167
			foreach ($donnees_meta['IPTC'] as $prop => &$valeur) {
447
	
168
				$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
448
		$data_tab['ci_meta_exif_white_balance'] = NULL ;		
169
			}
449
	
170
		}
450
		$data_tab['ci_meta_exif_digital_zoom_ratio'] = NULL ;
171
		$xml .= '</iptc>'."\n"."\n";
451
	
172
		
452
		$data_tab['ci_meta_exif_scene_capture_type'] = NULL ;
173
		return $xml;
453
	
174
	}
454
		$data_tab['ci_meta_exif_gain_control'] = NULL ;
175
	
455
	
176
	private function convertirXmpVersXML($donnees_meta) {
456
		$data_tab['ci_meta_exif_contrast'] = NULL ;
177
		
457
		
178
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
458
		$data_tab['ci_meta_exif_saturation'] = NULL ;
179
		$xml .= '<xmp>';
459
	
180
		if (isset($donnees_meta['XMP'])) {
460
		$data_tab['ci_meta_exif_sharpness'] = NULL ;
181
			foreach ($donnees_meta['XMP'] as $prop => &$valeur) {
461
	
182
				$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
462
		$data_tab['ci_meta_exif_subject_distance_range'] = NULL ;
183
			}
463
	
184
		}
464
		$data_tab['ci_meta_exif_autres'] .= " " ;
185
		$xml .= '</xmp>';
465
	
186
		
466
		return $data_tab ;			
187
		return $xml;
467
	}
188
	}
468
	
189
	
469
	/**
190
	private function convertirMakernoteVersXML($donnees_meta) {
470
	* Crée le tableau vide pour stocker les section supplémentaires pour le cel
191
		
471
	* 
192
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
472
	* @return array $tab référence vers le tableau de metadonnées
193
		$xml .= '<makernote>';
473
	* 
194
		if (isset($donnees_meta['MAKERNOTE'])) {
474
	**/
195
			foreach ($donnees_meta['MAKERNOTE'] as $prop => &$valeur) {
475
	private function InitialiserSectionsSupplementaires($tab)
196
				$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
476
	{
197
			}
477
		$tab['ci_meta_exif_autres'] .= " " ;
198
		}
478
		$tab['ci_meta_iptc_autres'] .= " " ;
199
		$xml .= '</makernote>';
479
		$tab['ci_nom_original'] = NULL ;
200
		
480
		$tab['ci_md5'] = NULL ;
201
		return '';
481
	}
202
	}
482
}
203
}
483
?>
204
?>