Cela fait un moment que j'essaye de faire fonctionner un code qui doit permettre l'affichage automatique des coordonnées GPS d'une photo.
Le but étant d'utiliser les données EXIF d'une photo pour faire une page de fonds d'écran sur mon site
Les images sont stockées dans un dossier unique et le script vient automatiquement chercher ces images pour exploiter les données EXIF et les mettre en page.
J'ai trouvé une base de script PHP que j'ai modifié pur le mettre à mon gout.
Et pour finir il me reste à faire fonctionner les coordonnées GPS
J'arrive bien à sortir les latitude et longitude avec aussi l'altitude mais hélas le format affiché n'est pas terrible voilà ce que j'arrive à faire apparaitre :
Latitude : N 48° 13' 5268/625/100" Longitude : W 1° 30' 123597/2500/100"
Le format donné par PHP après l'extraction EXIF est par exemple pour la latitude 48/1 13/1 5268/625 j'ai donc tâtonné pour arriver à masquer les /1 pour le 48 et le 13 mais je n'arrive vraiment pas à faire faire la grande division
Le code qui me permet d'afficher la latitude
if (isset($GPSLatitudeRef))
echo 'Latitude : '.$GPSLatitudeRef.' ';
$latitude = $exif['GPS']['GPSLatitude'];
echo "" .substr( $latitude[0],0,-2) ."° ".substr( $latitude[1],0,-2) ."' ".$latitude[2].'/100" '
Et le code complet de la pageAlors si quelqu'un peut m'aider
<html>
<head>
</head>
<body >
<div align="center">
<table border="0" width="480">
<tr>
<td align="center" style="font-family: Comic Sans MS; font-size: 18pt"> </td>
</tr>
</table>
<?php
$dir="1";
$dossier=opendir($dir);
while(false!==($files=readdir($dossier)))
{
if(in_array(strtolower(pathinfo($files,PATHINFO_EXTENSION)), array('jpg', 'jpeg', 'tif', 'tiff', 'gif', 'png', 'bmp'))){
$listfiles[]=$files;
}
}
closedir($dossier);
rsort($listfiles); //rsort ordre inverse alphabétique sort ordre alphabétique
$nbe=count($listfiles);
//Les parametres
if (!empty($_GET['parPage'])) { //Nombre d'image par page
$images_par_page=intval($_GET['parPage']);
}
else $images_par_page = 14;
if (!empty($_GET['image_debut'])) {//L'index de la première image à afficher dans cette page
$index_image_debut = intval($_GET['image_debut']);
}
else $index_image_debut = 0;
//L'index de la dernière
if ($nbe < ($index_image_debut + $images_par_page)) {//Pour ne pas essayer d'afficher plus d'images qu'on en a
$index_image_fin = $nbe - 1 ;
}
else $index_image_fin = $index_image_debut + $images_par_page;
$nbe_pages_=$nbe/($images_par_page+1);
$nbe_pages=ceil($nbe_pages_);
//Affichage de la galerie
for ($i=$index_image_debut;$i<=$index_image_fin;$i++) {
$lien=$dir.'/'.$listfiles[$i];
unset($exif_tab); //réinitialisation du tableau exif_tab
if(in_array(strtolower(end(explode('.', $listfiles[$i]))), array('jpg', 'jpeg', 'tif', 'tiff'))) // Si fichier Jpeg ou Tiff
{
if($exif = exif_read_data($lien, EXIF, true)) // Si le fichier $listfiles[$i] contient des infos Exif
{
foreach ($exif as $key => $section) // On parcourt la première partie du tableau multidimensionnel
{
foreach ($section as $name => $value) // On parcourt la seconde partie
{
$exif_tab[$name] .= $value; // Récupération des valeurs dans le tableau $exif_tab
}
}
if($exif_tab['Make']) // Marque de l'appareil
$marque = $exif_tab['Make'];
if($exif_tab['Model'])// Modèle de l'appareil
$modele = $exif_tab['Model'];
if($exif_tab['DateTimeOriginal'])
$date = $exif_tab['DateTimeOriginal']; // Date de la prise de vue (heure de l'appareil)
if($exif_tab['Software']) // Si l'information sur le logiciel existe
$logiciel = $exif_tab['Software'];
if($exif_tab['GPSAltitude']) // Altitude
$GPSAltitude = $exif_tab['GPSAltitude'];
if($exif_tab['GPSLatitudeRef']) // Latitude Ref
$GPSLatitudeRef = $exif_tab['GPSLatitudeRef'];
if($exif_tab['GPSLongitudeRef']) // Longitude Ref
$GPSLongitudeRef = $exif_tab['GPSLongitudeRef'];
// La date est d'un format spécial, on va donc la rendre lisible
$date2 = explode(":", current(explode(" ", $date)));
$heure = explode(":", end(explode(" ", $date))); // Utile dans le cas où vous souhaitez extraire l'heure
$annee = current($date2); // Je lis la valeur courante de date2
$mois = next($date2); // Puis la suivante (c'est un tableau)
$jour = next($date2); // Puis la suivante
// De même pour obtenir l'heure
$heure2 = current($heure); // Je lis la valeur courante de heure
$minute = next($heure); // Puis la suivante (c'est un tableau)
$seconde = next($heure); // Puis la suivante
}
}
unset($auteur, $titre, $commentaire); //réinitialisation des variables
GetImageSize ($lien,$info);
if (isset($info["APP13"])) //lecture des informations IPTC
{
$iptc = iptcparse ($info["APP13"]);
$commentaire = $iptc["2#120"][0];
}
echo '<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td align="center" valign="middle"><a title="Les wallpapers du site Jeep Wrangler JKU" target="_blank" href="'.$lien.'"><img border="4" class="img" alt="'.$lien.'" height="480" src="'.$lien.'"/></a></td>
</tr>
<tr>
<td align="center" valign="middle">
<p><font size="4" face="Comic Sans MS">';
//affichage d'un commentaire sur le lieu de la prise de la photo
if (isset($commentaire))
echo 'Localisation : '.$commentaire.'<br>'; //conditionne l affichage du commentaire à son existence
//affichage des coordonnées GPS
//la latitude
if (isset($GPSLatitudeRef))
echo 'Latitude : '.$GPSLatitudeRef.' ';
$latitude = $exif['GPS']['GPSLatitude'];
echo "" .substr( $latitude[0],0,-2) ."° ".substr( $latitude[1],0,-2) ."' ".$latitude[2].'/100" ';
//la longitude
if (isset($GPSLongitudeRef))
echo 'Longitude : '.$GPSLongitudeRef.' ';
$longitude = $exif['GPS']['GPSLongitude'];
echo "" .substr( $longitude[0],0,-2) ."° ".substr( $longitude[1],0,-2) ."' ".$longitude[2].'/100" ';
//l'altitude
if (isset($GPSAltitude))
echo '<br>Altitude : '.substr($GPSAltitude,0,-2).'m.<br>';
//date de la prise de vue
echo 'Photo prise ';
if (isset($date))
echo ' le '.$jour.'/'.$mois.'/'.$annee.', à '.$heure2.'h '.$minute.'min '.$seconde.'s,'; //conditionne l affichage de la date à son existence
if (isset($marque)||isset($modele))
echo'<br> avec un '.$marque.' '.$modele.'.<br>'; //conditionne l affichage du modèle d'appareil photo à son existence
if (isset($logiciel))
echo 'Modifiée avec '.$logiciel.'.<br>'; //conditionne l affichage du logiciel à son existence
echo '
</font></p>
</td>
</tr>
</tbody>
</table>
';
unset($date, $jour, $mois, $annee, $heure2, $minute, $seconde, $marque, $modele, $logiciel); //réinitialisation des variables
}
?>
</body>
</html>