Je suis sur le même projet que Karen et me permet de remonter où j'en suis arrivé.
Je confirme donc ce que tous les autres ont trouvé avant moi, il s'agit bien de la fonction read_exif_data qui foire dans certaines (beaucoup) versions de php. Les données GPS ne sont pas récupérées lorsque la section MakerNotes est présente.
J'ai commencé par un truc vraiment pas joli pour que ça soit automatique: suppression de la note foireuse lors de l'import:
diff --git a/include/functions_metadata.inc.php b/include/functions_metadata.inc.php index 3d35900..a3b2b84 100644 --- a/include/functions_metadata.inc.php +++ b/include/functions_metadata.inc.php @@ -183,6 +183,15 @@ function get_exif_data($filename, $map) // GPS data $gps_exif = array_intersect_key($exif, array_flip(array('GPSLatitudeRef', 'GPSLatitude', 'GPSLongitudeRef', 'GPSLongitude'))); + if (count($gps_exif) != 4) + { + // If MakerNotes, read_exif_data does not manage to retrieve GPS data correctly (php bug) + if ( isset($exif['SectionsFound']) and strpos($exif['SectionsFound'], 'MAKERNOTE' ) ) { + shell_exec('/usr/bin/exiftool -makernotes= ' . $filename); + $exif = @read_exif_data($filename); + $gps_exif = array_intersect_key($exif, array_flip(array('GPSLatitudeRef', 'GPSLatitude', 'GPSLongitudeRef', 'GPSLongitude'))); + } + } if (count($gps_exif) == 4) { if (
Pour finalement me dire que modifier les images avant upload c'était quand même la manière la plus adaptée.
exiftool -overwrite_original_in_place -makernotes= **/*.JPG
Okay donc apparemment pleins de versions différentes de php sont impactées.
Pour l'instant je me suis fait un hack rapide pour utiliser exiftool à la place de read_exif_data
Dans la fonction get_exif_data, j'ai ajouté:
+ $result['longitude'] = shell_exec('/usr/bin/exiftool ' . $filename . ' -GPSLongitude -b');
+ $result['latitude'] = shell_exec('/usr/bin/exiftool ' . $filename . ' -GPSLatitude -b');
et supprimé toute la partie utilisant read_exif_data.
C'est bien moche et évidemment beaucoup plus lent mais au moins j'ai retrouvé mes informations GPS.
Bonjour Pierrick,
Merci de ta réponse rapide. J'avais trouvé ce rapport de bug, mais ils sont sur du PhP version 7, je suis sur une version 5...
Je vais creuser un peu cette question, mais si je ne trouve rien je vais peut-être contacter les gens de PhP car tout semble ramener vers eux.
Je tiendrai au courant quand (si) ce sera fixé, pour le cas où d'autres utilisateurs aient le même problème
Merci !
Bonjour Karen,
Là comme ça immédiatement, je pense à [Github] Piwigo issue #520 : regarde un peu et dis moi si c'est pas équivalent.
Chère communauté
J'ai besoin de vous pour résoudre un bug qui m'est arrivé hier. J'ai un Canon 600D, et j'utilise dans ma gallery OpenStreetMap. Jusque là aucun problème, la dernière synchro a été faite il y a 2 semaines.
Mais hier, lors de la synchro (Outils > Synchronisation), les latitude/longitude ne sont plus lues. J'ai remonté le bug jsuqu'à la fonction "read_exif_data".
En gros, pour les photos qui ne sont PAS faites avec un Canon, les coordonnées sont bien importées. Pour les photos faites avec le Canon, les informations n'apparaissent plus.
J'ai fait un test simple pour bien expliquer:
- 2 photos, canon.jpg et not_canon.jpg, toutes deux avec des lat/lon
- Avec exiftool, je vois les coordonnées dans les 2 photos:
http://pastebin.com/CqzBFwhp
- Avec read_exif_data, elles apparaissent juste dans not_canon.jpg:
<?php
$filename = "././galleries/canon.jpg";
$exif=@read_exif_data($filename);
echo "<pre>";var_dump($exif);echo "</pre>";
$filename = "././galleries/not_canon.jpg";
$exif=@read_exif_data($filename);
echo "<pre>";var_dump($exif);echo "</pre>";
?>
Et le résultat
http://pastebin.com/SmRvpC8F
(testé avec 2 version: php5 Version: 5.6.26 and 5.6.27)
Une idée de ce qu'il se passe? Pensez-vous que c'est un bug de read_exif_data ou est-ce que je suis passée à côté de quelque chose d'évident?
Merci beaucoup
Version de Piwigo: 2.8.2
Version de PHP: 5.6.26 et ou 5.6.27