Subversion Repositories eFlore/Applications.cel

Rev

Rev 632 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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