New file |
0,0 → 1,479 |
<?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($url,"EXIF,COMPUTED,IFD0,FILE,COMMENT",true,false); |
|
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 existe |
if (isset($info["APP13"])) |
{ |
// on parse les donnees |
$iptc = iptcparse($info["APP13"]); |
// et on les analyse |
foreach($iptc as $marker => $section) |
{ |
foreach($section as $nom => $val) |
{ |
// pour remplir le tableau de donnees |
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 iptc |
case "2#005" : |
$data_tab['ci_meta_iptc_category'] = $val ; |
break; |
|
case "2#025" : |
$data_tab['ci_meta_iptc_mots_cles'] = $val ; |
break; |
|
// champ by line |
case "2#080" : |
$data_tab['ci_meta_iptc_by_line'] = $val ; |
break ; |
|
// champ by line titre |
case "2#085" : |
$data_tab['ci_meta_iptc_by_line_title'] = $val ; |
break ; |
|
// ville |
case "2#090" : |
$data_tab['ci_meta_iptc_city'] = $val ; |
break ; |
|
// sous location |
case "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 pays |
case "2#100" : |
$data_tab['ci_meta_iptc_country_primary_location_code'] = $val ; |
break ; |
|
// code pays |
case "2#101" : |
$data_tab['ci_meta_iptc_country_name'] = $val ; |
break ; |
|
// titre principal |
case "2#105" : |
$data_tab['ci_meta_iptc_headline'] = $val ; |
break ; |
|
// credit |
case "2#110" : |
$data_tab['ci_meta_iptc_credit'] = $val ; |
break ; |
|
// copyright |
case "2#116" : |
$data_tab['ci_meta_iptc_copyright_notice'] = $val ; |
break ; |
|
// contact |
case "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 ; |
} |
} |
?> |