Rev 1071 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Classe d'extraction de metadonnées afin de les mettre dans* un tableau au format du cel* Encodage en entrée : utf8* Encodage en sortie : utf8** @author Aurélien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version $Id$*/class ExtracteurMetadonnees {public function extraireMetadonnees($chemin_fichier) {$iptc = $this->extraireIptc($chemin_fichier);$exif = $this->extraireExif($chemin_fichier);$meta = array_merge($exif, $iptc);$this->initialiserSectionsSupplementaires($meta);return $meta;}/*** Extraction des metadonnées exif**/public function extraireExif($chemin_fichier) {$exif_tab = $this->initialiserTableauExif ();$exif = @exif_read_data($chemin_fichier,"EXIF,COMPUTED,IFD0,FILE,COMMENT", true, false);if ($exif) {foreach ($exif as $key => $section) {foreach ($section as $name => $val) {if ($name != "MakerNote") {$this->decoderValeurExif($name, $val , $exif_tab);}}}}return $exif_tab;}/*** Extraction des metadonnées iptc**/public function extraireIptc($chemin_fichier) {$iptc_tab = $this->initialiserTableauIptc();// geimagesize renvoie le infos iptc dans le tableau info$size = getimagesize($chemin_fichier, $info);// s'il existeif (isset($info['APP13'])) {// on parse les donnees$iptc = iptcparse($info['APP13']);if ($iptc) {// et on les analyseforeach ($iptc as $marker => $section) {foreach ($section as $nom => $val) {// pour remplir le tableau de donnees$this->decoderValeurIptc($marker, $val, $iptc_tab);}}}}return $iptc_tab;}/*** Stocke une valeur de metadonnées exif dans le champ du tableau correspondant* @param String $nom nom de la valeur* @param String $val valeur* @param String $data référence vers le tableau où la donnée sera stockée**/private function decoderValeurExif($nom, $val, &$data_tab) {switch ($nom) {case "Height" :$data_tab['ci_meta_height'] = $val ;break ;case "Width" :$data_tab['ci_meta_width'] = $val ;break ;case "Make" :$data_tab['ci_meta_make'] = $val ;break ;case "Model" :$data_tab['ci_meta_model'] = $val ;break ;case "XResolution" :$data_tab['ci_meta_x_resolution'] = $val ;break ;case "YResolution" :$data_tab['ci_meta_y_resolution'] = $val ;break ;case "DateTimeOriginal" :$data_tab['ci_meta_date_time'] = $val ;break ;case "GPS" :$data_tab['ci_meta_gps'] = $val ;break ;case "UserComment" :$data_tab['ci_meta_user_comment'] = '"'.$val.'"' ;break ;case "ExposureTime" :$data_tab['ci_meta_exif_exposure_time'] = $val ;break ;case "FNumber" :$data_tab['ci_meta_exif_f_number'] = $val ;break ;case "ExifVersion" :$data_tab['ci_meta_exif_exif_version'] = $val ;break ;case "CompressedBitsPerPixel" :$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = $val ;break ;case "ShutterSpeedValue" :$data_tab['ci_meta_exif_shutter_speed_value'] = $val ;break ;case "ApertureValue" :$data_tab['ci_meta_exif_aperture_value'] = $val ;break ;case "ExposureBiasValue" :$data_tab['ci_meta_exif_exposure_bias_value'] = $val ;break ;case "MaxApertureValue" :$data_tab['ci_meta_exif_max_aperture_value'] = $val ;break ;case "MeteringMode" :$data_tab['ci_meta_exif_metering_mode'] = $val ;break ;case "LightSource" :$data_tab['ci_meta_exif_light_source'] = $val ;break ;case "Flash" :$data_tab['ci_meta_exif_flash'] = $val ;break ;case "FocalLength" :$data_tab['ci_meta_exif_focal_length'] = $val ;break ;case "FlashpixVersion" :$data_tab['ci_meta_exif_flash_pix_version'] = $val ;break ;case "ColorSpace" :$data_tab['ci_meta_exif_color_space'] = $val ;break ;case "InteroperabilityOffset" :$data_tab['ci_meta_exif_interoperability_offset'] = $val ;break ;case "FocalPlaneXResolution" :$data_tab['ci_meta_exif_focal_plane_x_resolution'] = $val ;break ;case "FocalPlaneYResolution" :$data_tab['ci_meta_exif_focal_plane_y_resolution'] = $val ;break ;case "FocalPlaneResolutionUnit" :$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = $val ;break ;case "SensingMethod" :$data_tab['ci_meta_exif_sensing_method'] = $val ;break ;case "FileSource" :$data_tab['ci_meta_exif_file_source'] = $val ;break ;case "CustomRendered" :$data_tab['ci_meta_exif_custom_rendered'] = $val ;break ;case "ExposureMode" :$data_tab['ci_meta_exif_exposure_mode'] = $val ;break ;case "WhiteBalance" :$data_tab['ci_meta_exif_white_balance'] = $val ;break ;case "DigitalZoomRatio" :$data_tab['ci_meta_exif_digital_zoom_ratio'] = $val ;break ;case "SceneCaptureType" :$data_tab['ci_meta_exif_scene_capture_type'] = $val ;break ;case "GainControl" :$data_tab['ci_meta_exif_gain_control'] = $val ;break ;case "Contrast" :$data_tab['ci_meta_exif_contrast'] = $val ;break ;case "Saturation" :$data_tab['ci_meta_exif_saturation'] = $val ;break ;case "Sharpness" :$data_tab['ci_meta_exif_sharpness'] = $val ;break ;case "SubjectDistanceRange" :$data_tab['ci_meta_exif_subject_distance_range'] = $val ;break ;default :$data_tab['ci_meta_exif_autres'] .= $nom.":".$val.";" ;}}/*** Stocke une valeur de metadonnées iptc dans le champ du tableau correspondant* @param String $nom nom de la valeur* @param String $val valeur* @param String $data référence vers le tableau où la donnée sera stockée**/private function decoderValeurIptc($nom, $val, &$data_tab) {switch($nom) {// mots cles iptccase "2#005" :$data_tab['ci_meta_iptc_category'] = $val ;break;case "2#025" :$data_tab['ci_meta_iptc_mots_cles'] = $val ;break;// champ by linecase "2#080" :$data_tab['ci_meta_iptc_by_line'] = $val ;break ;// champ by line titrecase "2#085" :$data_tab['ci_meta_iptc_by_line_title'] = $val ;break ;// villecase "2#090" :$data_tab['ci_meta_iptc_city'] = $val ;break ;// sous locationcase "2#092" :$data_tab['ci_meta_iptc_sub_location'] = $val ;break ;// etat (pour les us)case "2#095" :$data_tab['ci_meta_iptc_province_state'] = $val ;break ;// code payscase "2#100" :$data_tab['ci_meta_iptc_country_primary_location_code'] = $val ;break ;// code payscase "2#101" :$data_tab['ci_meta_iptc_country_name'] = $val ;break ;// titre principalcase "2#105" :$data_tab['ci_meta_iptc_headline'] = $val ;break ;// creditcase "2#110" :$data_tab['ci_meta_iptc_credit'] = $val ;break ;// copyrightcase "2#116" :$data_tab['ci_meta_iptc_copyright_notice'] = $val ;break ;// contactcase "2#118" :$data_tab['ci_meta_iptc_contact'] = $val ;break ;// autres (pour les champs qu'on ne prend pas en compte)default :$data_tab['ci_meta_iptc_autres'] .= $nom.":".$val.";" ;}}/*** Crée le tableau vide pour stocker les iptc pour le ce** @return array $data_tab référence vers le tableau où la donnée sera stockée***/private function initialiserTableauIptc() {$data_tab = array() ;$data_tab['ci_meta_iptc_category'] = NULL ;$data_tab['ci_meta_iptc_mots_cles'] = NULL ;$data_tab['ci_meta_iptc_by_line'] = NULL ;$data_tab['ci_meta_iptc_by_line_title'] = NULL ;$data_tab['ci_meta_iptc_city'] = NULL ;$data_tab['ci_meta_iptc_sub_location'] = NULL ;$data_tab['ci_meta_iptc_province_state'] = NULL ;$data_tab['ci_meta_iptc_country_primary_location_code'] = NULL ;$data_tab['ci_meta_iptc_country_name'] = NULL ;$data_tab['ci_meta_iptc_headline'] = NULL ;$data_tab['ci_meta_iptc_credit'] = NULL ;$data_tab['ci_meta_iptc_copyright_notice'] = NULL ;$data_tab['ci_meta_iptc_contact'] = NULL ;$data_tab['ci_meta_iptc_autres'] = " ";return $data_tab ;}/*** Crée le tableau vide pour stocker les exifs pour le cel** @return array $data_tab référence vers le tableau où la donnée sera stockée***/private function initialiserTableauExif() {$data_tab = array() ;$data_tab['ci_meta_height'] = 0 ;$data_tab['ci_meta_width'] = 0 ;$data_tab['ci_meta_make'] = NULL ;$data_tab['ci_meta_model'] = NULL ;$data_tab['ci_meta_x_resolution'] = NULL ;$data_tab['ci_meta_y_resolution'] = NULL ;$data_tab['ci_meta_date_time'] = NULL ;$data_tab['ci_meta_gps'] = NULL ;$data_tab['ci_meta_user_comment'] = NULL ;$data_tab['ci_meta_exif_exposure_time'] = NULL ;$data_tab['ci_meta_exif_f_number'] = NULL ;$data_tab['ci_meta_exif_exif_version'] = NULL ;$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = NULL ;$data_tab['ci_meta_exif_shutter_speed_value'] = NULL ;$data_tab['ci_meta_exif_aperture_value'] = NULL ;$data_tab['ci_meta_exif_exposure_bias_value'] = NULL ;$data_tab['ci_meta_exif_max_aperture_value'] = NULL ;$data_tab['ci_meta_exif_metering_mode'] = NULL ;$data_tab['ci_meta_exif_flash'] = NULL ;$data_tab['ci_meta_exif_light_source'] = NULL ;$data_tab['ci_meta_exif_focal_length'] = NULL ;$data_tab['ci_meta_exif_flash_pix_version'] = NULL ;$data_tab['ci_meta_exif_color_space'] = NULL ;$data_tab['ci_meta_exif_interoperability_offset'] = NULL ;$data_tab['ci_meta_exif_focal_plane_x_resolution'] = NULL ;$data_tab['ci_meta_exif_focal_plane_y_resolution'] = NULL ;$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = NULL ;$data_tab['ci_meta_exif_sensing_method'] = NULL ;$data_tab['ci_meta_exif_file_source'] = NULL ;$data_tab['ci_meta_exif_custom_rendered'] = NULL ;$data_tab['ci_meta_exif_exposure_mode'] = NULL ;$data_tab['ci_meta_exif_white_balance'] = NULL ;$data_tab['ci_meta_exif_digital_zoom_ratio'] = NULL ;$data_tab['ci_meta_exif_scene_capture_type'] = NULL ;$data_tab['ci_meta_exif_gain_control'] = NULL ;$data_tab['ci_meta_exif_contrast'] = NULL ;$data_tab['ci_meta_exif_saturation'] = NULL ;$data_tab['ci_meta_exif_sharpness'] = NULL ;$data_tab['ci_meta_exif_subject_distance_range'] = NULL ;$data_tab['ci_meta_exif_autres'] = " ";return $data_tab ;}/*** Crée le tableau vide pour stocker les section supplémentaires pour le cel** @return array $tab référence vers le tableau de metadonnées***/private function InitialiserSectionsSupplementaires(&$tab) {$tab['ci_meta_exif_autres'] .= " " ;$tab['ci_meta_iptc_autres'] .= " " ;$tab['ci_nom_original'] = NULL ;$tab['ci_md5'] = NULL ;}}?>