Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2459 → Rev 2460

/trunk/jrest/bibliotheque/ExtracteurMetadonnees.php
1,16 → 1,19
<?php
// declare(encoding='UTF-8');
/**
* 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
* Classe d'extraction de metadonnées d'un fichier JPEG afin de les mettre dans un tableau au format du CEL.
*
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@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$
* @copyright © 2012, Tela Botanica
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ExtracteurMetadonnees {
 
496,10 → 499,10
}
 
public function decoderMetadonneesBasique($chemin_fichier) {
$exif = @exif_read_data($chemin_fichier, "EXIF,COMPUTED,IFD0,FILE,COMMENT", true, false);
$exif = @exif_read_data($chemin_fichier, "EXIF,COMPUTED,IFD0,FILE,COMMENT", true, false);
 
// tant pis pour les makernote et xmp, les décoder demande trop de librairies externes, autant installer exiftool alors
$metadonnees = array();
// tant pis pour les makernote et xmp, les décoder demande trop de librairies externes, autant installer exiftool alors
$metadonnees = array();
$metadonnees['XMP'] = array();
unset($metadonnees['EXIF']['MakerNote']);
$metadonnees['MAKERNOTE'] = array();
511,142 → 514,140
$metadonnees_non_formatees = array_merge($metadonnees_non_formatees, $exif['IFD0']);
}
$metadonnees['EXIF'] = $this->formaterTableauExif($metadonnees_non_formatees);
$metadonnees['IPTC'] = $this->extraireIptc($chemin_fichier);
$metadonnees['File'] = array(
'ImageWidth' => array('id' => '', 'valeur' => $exif['COMPUTED']['Width']),
$metadonnees['IPTC'] = $this->extraireIptc($chemin_fichier);
$metadonnees['File'] = array(
'ImageWidth' => array('id' => '', 'valeur' => $exif['COMPUTED']['Width']),
'ImageHeight' => array('id' => '', 'valeur' => $exif['COMPUTED']['Height']));
return $metadonnees ;
}
return $metadonnees ;
}
 
private function formaterTableauExif(&$tableau) {
$tableau_exif_formate = array();
private function formaterTableauExif(&$tableau) {
$tableau_exif_formate = array();
 
foreach ($tableau as $nom_tag => $valeur) {
$id = '';
if (isset($this->tableau_ids_tags_exif[$nom_tag])) {
$id = $this->tableau_ids_tags_exif[$nom_tag];
}
$tableau_exif_formate[$nom_tag] = array('id' => $id, 'valeur' => $valeur);
}
foreach ($tableau as $nom_tag => $valeur) {
$id = '';
if (isset($this->tableau_ids_tags_exif[$nom_tag])) {
$id = $this->tableau_ids_tags_exif[$nom_tag];
}
$tableau_exif_formate[$nom_tag] = array('id' => $id, 'valeur' => $valeur);
}
 
return $tableau_exif_formate;
}
return $tableau_exif_formate;
}
 
/**
* Extraction des metadonnées iptc
**/
public function extraireIptc($chemin_fichier) {
$meta = array();
/**
* Extraction des metadonnées iptc
*/
public function extraireIptc($chemin_fichier) {
$meta = array();
 
// getimagesize renvoie les infos iptc dans le tableau info
$info = array();
$size = getimagesize($chemin_fichier, $info);
// getimagesize renvoie les infos iptc dans le tableau info
$info = array();
$size = getimagesize($chemin_fichier, $info);
 
// s'il existe
if (isset($info["APP13"])) {
// on parse les donnees
$iptc = iptcparse($info["APP13"]);
if ($iptc) {
// et on les analyse
foreach ($iptc as $marker => $section) {
foreach ($section as $nom => $val) {
// pour remplir le tableau de donnees
$this->decoderValeurIptc($marker, $val, $meta);
}
}
}
}
// s'il existe
if (isset($info['APP13'])) {
// on parse les donnees
$iptc = iptcparse($info['APP13']);
if ($iptc) {
// et on les analyse
foreach ($iptc as $marker => $section) {
foreach ($section as $nom => $val) {
// pour remplir le tableau de donnees
$this->decoderValeurIptc($marker, $val, $meta);
}
}
}
}
return $meta;
}
 
return $meta;
}
/**
* 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) {
case "2#005" :// mots cles iptc
$data_tab['Category'] = array('id' => '5', 'valeur' => $val);
break;
case "2#080" :// champ by line
$data_tab['By-Line'] = array('id' => '80', 'valeur' => $val);
break ;
case "2#085" :// champ by line titre
$data_tab['By-LineTitle'] = array('id' => '85', 'valeur' => $val);
break ;
case "2#090" :// ville
$data_tab['City'] = array('id' => '90', 'valeur' => $val);
break ;
case "2#092" :// sous location
$data_tab['SubLocation'] = array('id' => '92', 'valeur' => $val);
break ;
case "2#095" :// etat (pour les us)
$data_tab['ProvinceState'] = array('id' => '95', 'valeur' => $val);
break ;
case "2#100" :// code pays
$data_tab['CountryPrimaryLocationCode'] = array('id' => '100', 'valeur' => $val);
break ;
case "2#101" :// code pays
$data_tab['CountryName'] = array('id' => '101', 'valeur' => $val);
break ;
case "2#105" :// titre principal
$data_tab['Headline'] = array('id' => '105', 'valeur' => $val);
break ;
case "2#110" :// credit
$data_tab['Credit'] = array('id' => '110', 'valeur' => $val);
break ;
case "2#116" :// copyright
$data_tab['CopyrightNotice'] = array('id' => '116', 'valeur' => $val);
break ;
case "2#118" :// contact
$data_tab['Contact'] = array('id' => '118', 'valeur' => $val);
break ;
default:
unset($data_tab['nom']);
}
}
 
/**
* 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) {
case "2#005" :// mots cles iptc
$data_tab['Category'] = array('id' => '5', 'valeur' => $val);
break;
case "2#080" :// champ by line
$data_tab['By-Line'] = array('id' => '80', 'valeur' => $val);
break ;
case "2#085" :// champ by line titre
$data_tab['By-LineTitle'] = array('id' => '85', 'valeur' => $val);
break ;
case "2#090" :// ville
$data_tab['City'] = array('id' => '90', 'valeur' => $val);
break ;
case "2#092" :// sous location
$data_tab['SubLocation'] = array('id' => '92', 'valeur' => $val);
break ;
case "2#095" :// etat (pour les us)
$data_tab['ProvinceState'] = array('id' => '95', 'valeur' => $val);
break ;
case "2#100" :// code pays
$data_tab['CountryPrimaryLocationCode'] = array('id' => '100', 'valeur' => $val);
break ;
case "2#101" :// code pays
$data_tab['CountryName'] = array('id' => '101', 'valeur' => $val);
break ;
case "2#105" :// titre principal
$data_tab['Headline'] = array('id' => '105', 'valeur' => $val);
break ;
case "2#110" :// credit
$data_tab['Credit'] = array('id' => '110', 'valeur' => $val);
break ;
case "2#116" :// copyright
$data_tab['CopyrightNotice'] = array('id' => '116', 'valeur' => $val);
break ;
case "2#118" :// contact
$data_tab['Contact'] = array('id' => '118', 'valeur' => $val);
break ;
default:
unset($data_tab['nom']);
}
}
private function obtenirHauteur() {
$hauteur = isset($this->meta['File']['ImageHeight']) ? $this->meta['File']['ImageHeight']['valeur'] : '';
return $hauteur;
}
 
private function obtenirHauteur() {
$hauteur = isset($this->meta['File']['ImageHeight']) ? $this->meta['File']['ImageHeight']['valeur'] : '';
return $hauteur;
}
private function obtenirLargeur() {
$largeur = isset($this->meta['File']['ImageWidth']) ? $this->meta['File']['ImageWidth']['valeur'] : '';
return $largeur;
}
 
private function obtenirLargeur() {
$largeur = isset($this->meta['File']['ImageWidth']) ? $this->meta['File']['ImageWidth']['valeur'] : '';
return $largeur;
}
private function obtenirDatePriseDeVue() {
$date = isset($this->meta['EXIF']['DateTimeOriginal']) ? $this->meta['EXIF']['DateTimeOriginal']['valeur'] : '';
return $date;
}
 
private function obtenirDatePriseDeVue() {
$date = isset($this->meta['EXIF']['DateTimeOriginal']) ? $this->meta['EXIF']['DateTimeOriginal']['valeur'] : '';
return $date;
}
private function obtenirAppareilFabricant() {
$fabriquant = isset($this->meta['EXIF']['Make']) ? $this->meta['EXIF']['Make']['valeur'] : '';
return $fabriquant;
}
 
private function obtenirAppareilFabricant() {
$fabriquant = isset($this->meta['EXIF']['Make']) ? $this->meta['EXIF']['Make']['valeur'] : '';
return $fabriquant;
}
private function obtenirAppareilModele() {
$modele = isset($this->meta['EXIF']['CameraModelName']) ? $this->meta['EXIF']['CameraModelName']['valeur'] : '';
return $modele;
}
 
private function obtenirAppareilModele() {
$modele = isset($this->meta['EXIF']['CameraModelName']) ? $this->meta['EXIF']['CameraModelName']['valeur'] : '';
return $modele;
}
private function convertirMetaVersXML($type) {
$xml = null;
if (isset($this->meta[$type])) {
$racine = strtolower($type);
 
private function convertirMetaVersXML($type) {
$xml = null;
if (isset($this->meta[$type])) {
$racine = strtolower($type);
 
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
$xml .= "<$racine>"."\n";
foreach ($this->meta[$type] as $prop => &$valeur) {
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
}
$xml .= "</$racine>";
}
return $xml;
}
}
?>
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
$xml .= "<$racine>"."\n";
foreach ($this->meta[$type] as $prop => &$valeur) {
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
}
$xml .= "</$racine>";
}
return $xml;
}
}