<?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)
 {
	$url = "/opt/lampp/htdocs/Documents/images_serveur/".$url.".jpg" ;
 
	$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#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 ;
		
		// 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_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_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 ;
}
?>