New file |
0,0 → 1,481 |
<?php |
/** |
|
Aurelien Peronnet aurelienperonnet@gmail.com 2008 |
|
Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et |
respectant les principes de diffusion des logiciels libres. Vous pouvez |
utiliser, modifier et/ou redistribuer ce programme sous les conditions |
de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA |
sur le site "http://www.cecill.info". |
En contrepartie de l'accessibilit? au code source et des droits de copie, |
de modification et de redistribution accord?s par cette licence, il n'est |
offert aux utilisateurs qu'une garantie limit?e. Pour les m?mes raisons, |
seule une responsabilit? restreinte p?se sur l'auteur du programme, le |
titulaire des droits patrimoniaux et les conc?dants successifs. |
|
A cet ?gard l'attention de l'utilisateur est attir?e sur les risques |
associ?s au chargement, ? l'utilisation, ? la modification et/ou au |
d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant |
donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? |
manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels |
avertis poss?dant des connaissances informatiques approfondies. Les |
utilisateurs sont donc invit?s ? charger et tester l'ad?quation du |
logiciel ? leurs besoins dans des conditions permettant d'assurer la |
s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement, |
? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?. |
|
Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez |
pris connaissance de la licence CeCILL, et que vous en avez accept? les |
termes. |
|
*/ |
|
|
// in : utf8 |
// out : utf8 |
/* |
* extractmetadonnee.php |
* |
* Cas d'utilisation : |
* exitraire des metadonnees exif et iptc d'une image |
* |
*/ |
|
function extraire_metadonnees($url) |
{ |
|
$iptc = extraire_iptc($url) ; |
$exif = extraire_exif($url) ; |
|
$meta = array_merge($exif,$iptc); |
fin_tableau_meta(&$meta) ; |
|
return $meta ; |
} |
|
/** |
* Extraction des metadonnées exif |
**/ |
function extraire_exif($url) |
{ |
$exif_tab = preparer_tableau_exif() ; |
|
$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") |
{ |
construire_tableau_insertion_exif($name, $val ,&$exif_tab) ; |
} |
} |
} |
|
return $exif_tab ; |
} |
|
/** |
* Extraction des metadonnées iptc |
**/ |
function extraire_iptc($url) |
{ |
$iptc_tab = preparer_tableau_iptc() ; |
|
// geimagesize renvoie le infos iptc dans le tableau info |
$size = getimagesize($url, $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 |
construire_tableau_insertion_iptc($marker, $val ,&$iptc_tab) ; |
} |
} |
} |
|
return $iptc_tab ; |
} |
|
// construit le tableau pour la requete avec les metadonnees exif |
function construire_tableau_insertion_exif($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.";" ; |
} |
} |
|
// construit le tableau pour la requete avec les metadonnees iptc |
function construire_tableau_insertion_iptc($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 ; |
|
// cahmp 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.";" ; |
} |
} |
|
function preparer_tableau_iptc() |
{ |
$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 ; |
} |
|
|
function preparer_tableau_exif() |
{ |
|
$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 ; |
} |
|
function fin_tableau_meta($tab) |
{ |
$tab['ci_meta_exif_autres'] .= " " ; |
$tab['ci_meta_iptc_autres'] .= " " ; |
$tab['ci_nom_original'] = NULL ; |
$tab['ci_md5'] = NULL ; |
} |
?> |