[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / gis / inc / iptc.php
diff --git a/www/plugins/gis/inc/iptc.php b/www/plugins/gis/inc/iptc.php
new file mode 100644 (file)
index 0000000..9eff943
--- /dev/null
@@ -0,0 +1,328 @@
+<?php
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+//#############################################################################################
+//##############################################################################################
+
+/* INFOS SUR LE FICHIER 
+
+Nom : iptc.class.php 
+Rôle : contient la classe permettant de gérer les IPTC d'un fichier image 
+Développeur(s) : Arica Alex, Thies C. Arntzen 
+
+FIN INFOS SUR LE FICHIER 
+
+
+INFOS SUR LA CLASSE 'class_iptc' 
+
+REFERENCES : Développée le 04 Octobre 02 par Arica Alex avec l'aide de Thies C. Arntzen 
+
+ROLE : permet de manipuler les iptc d'une image 
+
+VARIABLES : 
+- $h_codesIptc 
+- $h_cheminFichier 
+- $h_iptcData 
+
+METHODES : 
+- fct_lireIPTC 
+- fct_ecrireIPTC 
+- fct_iptcMaketag 
+
+FIN INFOS SUR LA CLASSE 
+
+*/ 
+
+
+class class_IPTC 
+{ 
+
+
+
+/* VARIABLES statics */ 
+
+var $h_codesIptc; /* $h_codesIptc : (tableau associatif) contient les codes des champs IPTC associés à un libellé */ 
+var $h_cheminImg; /* $h_cheminImg : (chaine) contient le chemin complet du fichier d'image */ 
+var $h_iptcData; /* $h_iptcData : (chaine) contient les données encodées de l'iptc de l'image */ 
+
+/* FIN VARIABLES statics 
+
+
+
+
+
+
+
+
+
+------------------------------------------------------------------------------------------------------- 
+
+
+
+
+
+
+
+
+INFOS SUR LA FONCTION 
+
+ROLE : constructeur 
+FONCTION : class_IPTC($cheminImg) 
+DESCRIPTION DES PARAMETRES : 
+- $cheminImg = (chaine) le chemin complet du fichier d'image à traiter 
+
+FIN INFOS SUR LA FONCTION */ 
+
+
+function class_IPTC($cheminImg) 
+{ 
+
+// Inititalisations 
+
+// Les valeurs IPTC pouvant être manipulées 
+$this -> h_codesIptc = array("005" => "objectName", 
+"007" => "editStatus", 
+"010" => "priority", 
+"015" => "category", 
+"020" => "supplementalCategory", 
+"022" => "fixtureIdentifier", 
+"025" => "keywords", 
+"030" => "releaseDate", 
+"035" => "releaseTime", 
+"040" => "specialInstructions", 
+"045" => "referenceService", 
+"047" => "referenceDate", 
+"050" => "referenceNumber", 
+"055" => "createdDate", 
+"060" => "createdTime", 
+"065" => "originatingProgram", 
+"070" => "programVersion", 
+"075" => "objectCycle", 
+"080" => "byline", 
+"085" => "bylineTitle", 
+"090" => "city", 
+"095" => "provinceState", 
+"100" => "countryCode", 
+"101" => "country", 
+"103" => "originalTransmissionReference", 
+"105" => "headline", 
+"110" => "credit", 
+"115" => "source", 
+"116" => "copyright", 
+"120" => "caption", 
+"121" => "localCaption", 
+"122" => "captionWriter"); 
+
+
+// On enregistre le chemin de l'image à traiter 
+$this -> h_cheminImg = $cheminImg; 
+
+
+// On extrait les données encodées de l'iptc 
+// getimagesize($this -> h_cheminImg, &$info); //avant,marche pas sinon
+getimagesize($this -> h_cheminImg, $info); //marche sans le & 
+$this -> h_iptcData = $info["APP13"]; 
+
+} 
+
+/* FIN FONCTION class_IPTC(); 
+
+
+
+
+
+
+
+
+
+------------------------------------------------------------------------------------------------------- 
+
+
+
+
+
+
+
+
+INFOS SUR LA FONCTION 
+
+ROLE : lit les IPTC d'une image et les renvoie dans un tableau associatif 
+FONCTION : fct_lireIPTC() 
+TYPE RETOURNE : chaine sous forme de tableau associatif 
+
+FIN INFOS SUR LA FONCTION */ 
+
+function fct_lireIPTC() 
+{ 
+       $tblIPTC = iptcparse($this -> h_iptcData); 
+       
+       while( (is_array($tblIPTC)) && (list($codeIPTC, $valeurIPTC) = each($tblIPTC)) ) 
+       { 
+               $codeIPTC = str_replace("2#", "", $codeIPTC); 
+               
+               if( ($codeIPTC != "000") && ($codeIPTC != "140")  && $this->h_codesIptc["$codeIPTC"]) 
+               { 
+                       while(list($index, ) = each($valeurIPTC)) 
+                       { 
+                               if ($this->h_codesIptc["$codeIPTC"]) $codeIPTC = $this->h_codesIptc["$codeIPTC"];
+                               $lesIptc[$codeIPTC] .= $valeurIPTC[$index].$retourLigne; 
+                               $retourLigne = "\n"; 
+                       } 
+               } 
+       } 
+       
+       if(is_array($lesIptc)) return $lesIptc; 
+       else return false; 
+} 
+
+/* FIN FONCTION fct_lireIPTC(); 
+
+
+
+
+
+
+
+
+------------------------------------------------------------------------------------------------------- 
+
+
+
+
+
+
+
+
+INFOS SUR LA FONCTION 
+
+ROLE : écrit des IPTC dans le fichier image 
+FONCTION : fct_ecrireIPTC() 
+DESCRIPTION DES PARAMETRES : 
+- $tblIPTC_util = (tableau associatif) contient les codes des champs IPTC à modifier associés leur valeur 
+- $cheminImgAModifier = (chaine) stocke le chemin de l'image dont l'IPTC est à modifier ; s'il est null 
+le chemin sera celui contenu dans '$this -> h_cheminImg' 
+TYPE RETOURNE : booléen 
+
+FIN INFOS SUR LA FONCTION */ 
+
+function fct_ecrireIPTC($tblIPTC_util, $cheminImgAModifier = "") 
+{ 
+
+// La tableau devant contenir des IPTC est vide ou n'est pas un tableau associatif 
+if( (empty($tblIPTC_util)) || (!is_array($tblIPTC_util)) ) return false; 
+
+
+// Si le chemin de l'image à modifier est vide alors on lui spécifie le chemin par défaut 
+if(empty($cheminImgAModifier)) $cheminImgAModifier = $this -> h_cheminImg; 
+
+
+// On récupère l'IPTC du fichier image courant 
+$tblIPTC_old = iptcparse($this -> h_iptcData); 
+
+
+// On prélève le tableau contenant les codes et les valeurs des IPTC de la photo 
+while(list($codeIPTC, $codeLibIPTC) = each($this -> h_codesIptc)) 
+{ 
+
+// On teste si les données originelles correspondant au code en cours sont présents 
+if (is_array($tblIPTC_old["2#".$codeIPTC])) $valIPTC_new = $tblIPTC_old["2#".$codeIPTC]; 
+else $valIPTC_new = array(); 
+
+
+// On remplace les valeurs des IPTC demandées 
+if (is_array($tblIPTC_util[$codeIPTC])) 
+{ 
+if (count($tblIPTC_util[$codeIPTC])) $valIPTC_new = $tblIPTC_util[$codeIPTC]; 
+
+}else{ 
+
+$val = trim(strval($tblIPTC_util[$codeIPTC])); 
+if (strlen($val)) $valIPTC_new[0] = $val; 
+} 
+
+
+// On crée un nouveau iptcData à partir de '$tblIPTC_new' qui contient le code et la valeur de l'IPTC 
+foreach($valIPTC_new as $val) 
+{ 
+$iptcData_new .= $this -> fct_iptcMaketag(2, $codeIPTC, $val); 
+} 
+
+} 
+
+
+/* A partir du nouveau iptcData contenu dans '$iptcData_new' on crée grâce à la fonction 'iptcembed()' 
+le contenu binaire du fichier image avec le nouveau IPTC inclu */ 
+$contenuImage = iptcembed($iptcData_new, $this -> h_cheminImg); 
+
+
+// Ecriture dans le fichier image 
+$idFichier = fopen($cheminImgAModifier, "wb"); 
+fwrite($idFichier, $contenuImage); 
+fclose($idFichier); 
+
+
+return true; 
+
+} 
+
+/* FIN FONCTION fct_ecrireIPTC(); 
+
+
+
+
+
+
+
+
+------------------------------------------------------------------------------------------------------- 
+
+
+
+
+
+
+
+
+INFOS SUR LA FONCTION 
+
+ROLE : permet de transformer une valeur de d'IPTC (code + valeur) en iptcData 
+AUTEUR : Thies C. Arntzen 
+FONCTION : fct_iptcMaketag($rec, $dat, $val) 
+DESCRIPTION DES PARAMETRES : 
+- $rec = (entier) toujours à mettre à 2 
+- $dat = (chaine) le code de l'IPTC (de type '110' et non '2#110') 
+- $val = (chaine) la valeur de l'IPTC 
+TYPE RETOURNE : booléen 
+
+FIN INFOS SUR LA FONCTION */ 
+
+function fct_iptcMaketag($rec, $dat, $val) 
+{ 
+$len = strlen($val); 
+if ($len < 0x8000) 
+return chr(0x1c).chr($rec).chr($dat). 
+chr($len >> 8). 
+chr($len & 0xff). 
+$val; 
+else 
+return chr(0x1c).chr($rec).chr($dat). 
+chr(0x80).chr(0x04). 
+chr(($len >> 24) & 0xff). 
+chr(($len >> 16) & 0xff). 
+chr(($len >> 8 ) & 0xff). 
+chr(($len ) & 0xff). 
+$val; 
+} 
+
+// FIN FONCTION fct_iptcMaketag(); 
+
+
+
+
+
+} 
+
+/* Fin class_IPTC */
+
+?>
\ No newline at end of file