Changeset 54437 in spip-zone for _plugins_/metadonnees_photo
- Timestamp:
- Nov 14, 2011, 12:02:46 PM (9 years ago)
- Location:
- _plugins_/metadonnees_photo/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/metadonnees_photo/trunk/paquet.xml
r54435 r54437 2 2 prefix="photo_infos" 3 3 categorie="multimedia" 4 version="2.0. 0"4 version="2.0.1" 5 5 etat="stable" 6 6 compatibilite="[3.0.0-beta;3.0.*]" -
_plugins_/metadonnees_photo/trunk/photo_infos_fonctions.php
r54431 r54437 37 37 } 38 38 39 /** 40 * Lire toutes les exifs d'une image 41 * et les memoriser en static pour optimisation 42 * 43 * @param string $fichier 44 * @return array 45 */ 39 46 function extraire_exif($fichier) { 40 global $pb_exif; 41 42 if ($pb_exif["$fichier"]) return $pb_exif["$fichier"]; 43 44 if (!file_exists($fichier)) return; 45 46 $time = filemtime($fichier); 47 48 $fichier_exif = sous_repertoire(_DIR_VAR, 'cache-exif') . md5($fichier.$time).".php"; 49 50 51 // Systeme de cache pour les variables exif 52 if (file_exists($fichier_exif)) { 53 lire_fichier($fichier_exif, $pb_ecrire); 54 $pb_exif["$fichier"] = unserialize($pb_ecrire); 55 56 return $pb_exif["$fichier"]; 57 } 58 59 60 include_spip("inc/exifReader"); 61 62 $er = new phpExifReader($fichier); 63 $er->processFile(); 64 $pb_exif["$fichier"] = $er->getImageInfo(); 65 66 // Essayer de trouver aux:Lens 67 $pb_exif["$fichier"]["auxLens"] = str_replace(" mm", " ", lire_aux_lens($fichier)); 68 69 70 71 // Completer GPS 72 if (function_exists('exif_read_data')) { 73 $exif_direc = @exif_read_data($fichier); 74 75 // Si Latitude deja fixee, la traiter 76 // Si la ref n'est ni N ni S, c'est une erreur (j'en trouve sur Flickr) 77 if (!($exif_direc["GPSLatitudeRef"] == "N" || $exif_direc["GPSLatitudeRef"] == "S")) { 78 unset($pb_exif["$fichier"]["GPSLatitude"]); 47 static $mem_exif; 48 49 if (isset($mem_exif[$fichier]) AND $mem_exif[$fichier]) return $mem_exif[$fichier]; 50 51 if (!file_exists($fichier)) 52 return array(); 53 54 $time = filemtime($fichier); 55 56 $fichier_exif = sous_repertoire(_DIR_VAR, 'cache-exif') . md5($fichier.$time).".php"; 57 58 // Systeme de cache pour les variables exif 59 if (file_exists($fichier_exif)) { 60 lire_fichier($fichier_exif, $cache); 61 if ($mem_exif[$fichier] = unserialize($cache)) 62 return $mem_exif[$fichier]; 63 } 64 65 66 include_spip("inc/exifReader"); 67 68 $er = new phpExifReader($fichier); 69 $er->processFile(); 70 $mem_exif[$fichier] = $er->getImageInfo(); 71 72 // Essayer de trouver aux:Lens 73 $mem_exif[$fichier]["auxLens"] = str_replace(" mm", " ", lire_aux_lens($fichier)); 74 75 76 77 // Completer GPS 78 if (function_exists('exif_read_data')) { 79 $exif_direc = @exif_read_data($fichier); 80 81 // Si Latitude deja fixee, la traiter 82 // Si la ref n'est ni N ni S, c'est une erreur (j'en trouve sur Flickr) 83 if (!($exif_direc["GPSLatitudeRef"] == "N" || $exif_direc["GPSLatitudeRef"] == "S")) { 84 unset($mem_exif[$fichier]["GPSLatitude"]); 85 } 86 if ($mem_exif[$fichier]["GPSLatitude"]) { 87 $exif_direc["GPSLatitude"][0] = $mem_exif[$fichier]["GPSLatitude"]["Degrees"]; 88 $exif_direc["GPSLatitude"][1] = ($mem_exif[$fichier]["GPSLatitude"]["Minutes"] * 100 + round($mem_exif[$fichier]["GPSLatitude"]["Seconds"] / 60 * 100)) . "/100"; 89 90 $exif_direc["GPSLatitudeRef"] = $mem_exif[$fichier]["GPSLatitudeRef"]; 91 } 92 // Traiter la Latitude 93 // Retourne GPSLatitude en degres, minutes, secondes 94 // Retour GPSLatitudeInt en valeur entiere pour Google 95 if (isset($exif_direc["GPSLatitude"])) { 96 97 $deg = $exif_direc["GPSLatitude"][0]; 98 if ( strpos($deg, "/") > 0) { 99 $deg = substr($deg, 0, strpos($deg, "/")); 79 100 } 80 if ($pb_exif["$fichier"]["GPSLatitude"]) { 81 $exif_direc["GPSLatitude"][0] = $pb_exif["$fichier"]["GPSLatitude"]["Degrees"]; 82 $exif_direc["GPSLatitude"][1] = ($pb_exif["$fichier"]["GPSLatitude"]["Minutes"] * 100 + round($pb_exif["$fichier"]["GPSLatitude"]["Seconds"] / 60 * 100)) . "/100"; 83 84 $exif_direc["GPSLatitudeRef"] = $pb_exif["$fichier"]["GPSLatitudeRef"]; 101 102 $min = $exif_direc["GPSLatitude"][1]; 103 if ( strpos($min, "/") > 0) { 104 $minutes = substr($min, 0, strpos($min, "/")); 105 $rap = substr($min, strpos($min, "/")+1, 12); 106 107 $minutes = $minutes / $rap; 108 109 $secondes = ($minutes - floor($minutes)) * 60 ; 110 $minutes = floor($minutes); 85 111 } 86 // Traiter la Latitude 87 // Retourne GPSLatitude en degres, minutes, secondes 88 // Retour GPSLatitudeInt en valeur entiere pour Google 89 if (isset($exif_direc["GPSLatitude"])) { 90 91 $deg = $exif_direc["GPSLatitude"][0]; 92 if ( strpos($deg, "/") > 0) { 93 $deg = substr($deg, 0, strpos($deg, "/")); 94 } 95 96 $min = $exif_direc["GPSLatitude"][1]; 97 if ( strpos($min, "/") > 0) { 98 $minutes = substr($min, 0, strpos($min, "/")); 99 $rap = substr($min, strpos($min, "/")+1, 12); 100 101 $minutes = $minutes / $rap; 102 103 $secondes = ($minutes - floor($minutes)) * 60 ; 104 $minutes = floor($minutes); 105 } 106 107 $N_S = $exif_direc["GPSLatitudeRef"]; 108 $pb_exif["$fichier"]["GPSLatitude"] = $deg."° $minutes"."’"." $secondes"."” $N_S"; 109 110 // Retourne aussi une valeur entiere pour Google Maps 111 $GPSLatitudeInt = $deg + ($min / 6000) ; 112 if ($N_S == "S") $GPSLatitudeInt = -1 * $GPSLatitudeInt; 113 $pb_exif["$fichier"]["GPSLatitudeInt"] = $GPSLatitudeInt ; 112 113 $N_S = $exif_direc["GPSLatitudeRef"]; 114 $mem_exif[$fichier]["GPSLatitude"] = $deg."° $minutes"."’"." $secondes"."” $N_S"; 115 116 // Retourne aussi une valeur entiere pour Google Maps 117 $GPSLatitudeInt = $deg + ($min / 6000) ; 118 if ($N_S == "S") $GPSLatitudeInt = -1 * $GPSLatitudeInt; 119 $mem_exif[$fichier]["GPSLatitudeInt"] = $GPSLatitudeInt ; 120 } 121 122 // Verifier que la precedente ref est E/W, sinon ne pas traiter 123 if (!($exif_direc["GPSLongitudeRef"] == "E" || $exif_direc["GPSLongitudeRef"] == "W")) { 124 unset($mem_exif[$fichier]["GPSLongitude"]); 125 } 126 if ($mem_exif[$fichier]["GPSLongitude"]) { 127 $exif_direc["GPSLongitude"][0] = $mem_exif[$fichier]["GPSLongitude"]["Degrees"]; 128 $exif_direc["GPSLongitude"][1] = ($mem_exif[$fichier]["GPSLongitude"]["Minutes"] * 100 + round($mem_exif[$fichier]["GPSLongitude"]["Seconds"] / 60 * 100)) . "/100"; 129 130 $exif_direc["GPSLongitudeRef"] = $mem_exif[$fichier]["GPSLongitudeRef"]; 131 } 132 // Traiter longitude 133 if (isset($exif_direc["GPSLongitude"])) { 134 $deg = $exif_direc["GPSLongitude"][0]; 135 if ( strpos($deg, "/") > 0) { 136 $deg = substr($deg, 0, strpos($deg, "/")); 114 137 } 115 138 116 // Verifier que la precedente ref est E/W, sinon ne pas traiter 117 if (!($exif_direc["GPSLongitudeRef"] == "E" || $exif_direc["GPSLongitudeRef"] == "W")) { 118 unset($pb_exif["$fichier"]["GPSLongitude"]); 139 $min = $exif_direc["GPSLongitude"][1]; 140 if ( strpos($min, "/") > 0) { 141 $minutes = substr($min, 0, strpos($min, "/")); 142 $rap = substr($min, strpos($min, "/")+1, 12); 143 144 $minutes = $minutes / $rap; 145 146 $secondes = ($minutes - floor($minutes)) * 60 ; 147 $minutes = floor($minutes); 119 148 } 120 if ($pb_exif["$fichier"]["GPSLongitude"]) { 121 $exif_direc["GPSLongitude"][0] = $pb_exif["$fichier"]["GPSLongitude"]["Degrees"]; 122 $exif_direc["GPSLongitude"][1] = ($pb_exif["$fichier"]["GPSLongitude"]["Minutes"] * 100 + round($pb_exif["$fichier"]["GPSLongitude"]["Seconds"] / 60 * 100)) . "/100"; 123 124 $exif_direc["GPSLongitudeRef"] = $pb_exif["$fichier"]["GPSLongitudeRef"]; 125 } 126 // Traiter longitude 127 if (isset($exif_direc["GPSLongitude"])) { 128 $deg = $exif_direc["GPSLongitude"][0]; 129 if ( strpos($deg, "/") > 0) { 130 $deg = substr($deg, 0, strpos($deg, "/")); 131 } 132 133 $min = $exif_direc["GPSLongitude"][1]; 134 if ( strpos($min, "/") > 0) { 135 $minutes = substr($min, 0, strpos($min, "/")); 136 $rap = substr($min, strpos($min, "/")+1, 12); 137 138 $minutes = $minutes / $rap; 139 140 $secondes = ($minutes - floor($minutes)) * 60 ; 141 $minutes = floor($minutes); 142 } 143 144 $W_E = $exif_direc["GPSLongitudeRef"]; 145 $pb_exif["$fichier"]["GPSLongitude"] = $deg."° $minutes"."’"." $secondes"."” $W_E"; 146 147 // Retourne aussi une valeur entiere pour Google Maps 148 $GPSLongitudeInt = $deg + ($min / 6000) ; 149 if ($W_E == "W") $GPSLongitudeInt = -1 * $GPSLongitudeInt; 150 $pb_exif["$fichier"]["GPSLongitudeInt"] = $GPSLongitudeInt ; 151 } 152 153 154 } 155 156 $pb_ecrire = serialize($pb_exif["$fichier"]); 157 ecrire_fichier($fichier_exif, $pb_ecrire); 158 159 160 return $pb_exif["$fichier"]; 161 } 162 163 function lire_exif($fichier, $type=false) { 149 150 $W_E = $exif_direc["GPSLongitudeRef"]; 151 $mem_exif[$fichier]["GPSLongitude"] = $deg."° $minutes"."’"." $secondes"."” $W_E"; 152 153 // Retourne aussi une valeur entiere pour Google Maps 154 $GPSLongitudeInt = $deg + ($min / 6000) ; 155 if ($W_E == "W") $GPSLongitudeInt = -1 * $GPSLongitudeInt; 156 $mem_exif[$fichier]["GPSLongitudeInt"] = $GPSLongitudeInt ; 157 } 158 159 160 } 161 162 ecrire_fichier($fichier_exif, serialize($mem_exif[$fichier])); 163 return $mem_exif[$fichier]; 164 } 165 166 /** 167 * Lire une valeur exif d'une umage 168 * @param string $fichier 169 * @param string $type 170 * @return array 171 */ 172 function lire_exif($fichier, $type=null) { 164 173 165 174 $exif = extraire_exif($fichier); 166 167 // print_r($exif); 168 169 if (!$type) return $exif; 170 else return $exif["$type"]; 171 172 173 174 } 175 176 if (!$type) 177 return $exif; 178 else 179 return $exif["$type"]; 180 } 181 175 182 176 183 function extraire_iptc($fichier) {
Note: See TracChangeset
for help on using the changeset viewer.