Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Script d'extration des métadonnées des images pour intégration dans la BDD v2.
 *
 * @category    php 5.2
 * @package             Cel/Scripts
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version     $Id$
 */
class ExtracteurMeta extends Cel {

        public function executer() {
                try {
                        echo "EXTRACTION des MÉTADONNÉES\n";
                        echo "Vérification config : ".$this->verifierConfig();

                } catch (Exception $e) {
                        $code = $e->getCode();
                        $message = $e->getMessage();
                        die("\n$code : $message\n");
                }
        }

        private function verifierConfig() {
                if (empty($this->config['cel']['chemin_images'])) {
                        $message = "Vous devez indiquer le dossier contenant la hiérarchie des images dans le paramètre : ".
                                "[cel] chemin_images";
                        throw new Exception($message, E_USER_ERROR);
                }
                return 'OK';
        }

        private function extraireMetadonneesExifTool($cheminImage) {
                $metadata = array();
                $res = exec('/usr/bin/exiftool -g -D '.$chemin_image, $metadata);

                $metadata_decodees = array();

                $categorie = '';
                foreach($metadata as &$data) {
                        if($this->estUnSeparateurCategorieExifTool($data)) {
                                $categorie = trim(str_replace('----','',$data));
                        } else {
                                $data_decodee = $this->parserValeurMetadonneeExifTool($data);
                                $cle_metadonnee = str_replace(' ', '', $data_decodee['cle']);
                                $metadata_decodees[$categorie][$cle_metadonnee] = $data_decodee;
                                $this->id_cle_metadonnees[$cle_metadonnee] = $data_decodee['id'];
                        }
                }

                return $metadata_decodees;
        }

        public function obtenirCheminImageOriginale($id_image) {
                $nom = $this->convertirIdBddVersNomFichier($id_image, 'O');
                $dossier = $this->obtenirDossierPourFormat($id_image,'O');
                return $dossier.'/'.$nom;
        }

        public function convertirIdBddVersNomFichier($id, $format, $extension = 'jpg') {
                $id_avec_zeros = sprintf('%09s', $id) ;
                $id_avec_zeros_underscores = wordwrap($id_avec_zeros, 3 , '_', true) ;
                $nom_fichier = $id_avec_zeros_underscores.'_'.$format.'.'.$extension;
                return $nom_fichier;
        }

        public function obtenirDossierPourFormat($id, $format) {
                $chemin_base = $this->config['cel']['chemin_images'];
                $chemin_sur_serveur = $chemin_base;

                $id = sprintf('%09s', $id);
                $id = wordwrap($id, 3 , '_', true);
                list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);

                $chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$format;
                return $chemin_sur_serveur_final;
        }
}
?>