MAIS, pour l'image :
20161202_085945.jpg
mon script ne donne rien en sortie...
je ne vois pas pourquoi d'autant qu'au terminal, par un :
$ exiftool /Users/yt/Sites/tests/Flipping_image/photos/20161202_085945.jpg
j'obtiens des données correctes.
est-ce que ça pourrait provenir de la taille de l'image ?
ici 1,1Mo
je n'ai pas d'erreur, dans mon php.ini, j'ai :
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
et ma version de php est 5.6.25 sur macOS Sierra.
Au cas où vous auriez une indication surtout sur comment chercher ce
problème.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Maurette
Une Bévue :
Bonjour, Dans un dossier, j'ai plusieurs images : $ ls -al '/Users/yt/Sites/tests/Flipping_image/photos/' total 4848 drwxr-xr-x 10 yt staff 340B 13 déc 09:46 . drwxr-xr-x 10 yt staff 340B 13 déc 07:48 .. -rw-r--r-- 1 yt staff 1,1M 12 déc 10:01 20161202_085945.jpg -rw-r--r-- 1 yt staff 66K 13 déc 08:10 Cirques.jpg -rw-r--r-- 1 yt staff 662K 13 déc 08:27 Cirques.png -rw-r--r-- 1 yt staff 541K 6 déc 13:43 IMG_3130.JPG qui ont donc même use:group et mes droits "-rw-r--r--". je dois lire les dats exif de ces images, pour cela j'utilise : $cmd = "$EXIFTOOL " . $data['PATH']; exec($cmd, $Infos, $ExitStatus); foreach($Infos as $line) { $fields = explode(' : ', $line, 2 ); if(count($fields) == 2) { $data[rtrim($fields[0])] = $fields[1]; } } $data['ExitStatus'] = $ExitStatus; pour les trois images : Cirques.jpg Cirques.png IMG_3130.JPG j'ai les bonnes infos, du genre : { "ExifTool Version Number": "10.20", "File Name": "IMG_3130.JPG", "Directory": "/Users/yt/Sites/tests/Flipping_image/photos", "File Size": "541 kB", [...] "Hyperfocal Distance": "1.82 m", "Light Value": "4.0", "ExitStatus": 0 } MAIS, pour l'image : 20161202_085945.jpg mon script ne donne rien en sortie... je ne vois pas pourquoi d'autant qu'au terminal, par un : $ exiftool /Users/yt/Sites/tests/Flipping_image/photos/20161202_085945.jpg j'obtiens des données correctes. est-ce que ça pourrait provenir de la taille de l'image ? ici 1,1Mo je n'ai pas d'erreur, dans mon php.ini, j'ai : error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT et ma version de php est 5.6.25 sur macOS Sierra. Au cas où vous auriez une indication surtout sur comment chercher ce problème.
C'est bizarre, votre truc. La première chose à voir, c'est la taille de l'image, pas son poids. En effet, c'est un problème courant, les fonctions de base de traitement d'images jpeg qui sont pratiquement incontournables commencent par créer en mémoire un bitmap pouvant héberger l'image. Et généralement *en php*, c'est là que ça saute. Ça doit également mal se passer, en mutualisé par exemple, quand la mémoire est comptée. La fonction de base dispose d'une option qui permet de mapper la mémoire sur le disque au-dessus d'une certaine valeur, et cette option est relayée par certains programmes. Voyez pour exiftool ce qu'il en est. Mais ceci n'explique rien dans votre cas. Votre contexte mémoire est-il différent entre un terminal et exec() ? J'ai tendance à penser non, mais pourtant... Vous pourriez essayer de lancer un script qui appelle exiftools et écrit le résultat sur le disque, puis lire ce résultat. Si vous pouvez faire à la main: exiftool bla/bla.jpg > temp.txt et que vous ne pouvez pas exécuter un script avec cette seule ligne depuis php, ça vous donnera au moins une indication. -- Pierre Maurette
MAIS, pour l'image :
20161202_085945.jpg
mon script ne donne rien en sortie...
je ne vois pas pourquoi d'autant qu'au terminal, par un :
$ exiftool /Users/yt/Sites/tests/Flipping_image/photos/20161202_085945.jpg
j'obtiens des données correctes.
est-ce que ça pourrait provenir de la taille de l'image ?
ici 1,1Mo
je n'ai pas d'erreur, dans mon php.ini, j'ai :
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
et ma version de php est 5.6.25 sur macOS Sierra.
Au cas où vous auriez une indication surtout sur comment chercher ce
problème.
C'est bizarre, votre truc.
La première chose à voir, c'est la taille de l'image, pas son poids. En
effet, c'est un problème courant, les fonctions de base de traitement
d'images jpeg qui sont pratiquement incontournables commencent par
créer en mémoire un bitmap pouvant héberger l'image. Et généralement
*en php*, c'est là que ça saute. Ça doit également mal se passer, en
mutualisé par exemple, quand la mémoire est comptée.
La fonction de base dispose d'une option qui permet de mapper la
mémoire sur le disque au-dessus d'une certaine valeur, et cette option
est relayée par certains programmes. Voyez pour exiftool ce qu'il en
est.
Mais ceci n'explique rien dans votre cas. Votre contexte mémoire est-il
différent entre un terminal et exec() ? J'ai tendance à penser non,
mais pourtant...
Vous pourriez essayer de lancer un script qui appelle exiftools et
écrit le résultat sur le disque, puis lire ce résultat. Si vous pouvez
faire à la main:
exiftool bla/bla.jpg > temp.txt
et que vous ne pouvez pas exécuter un script avec cette seule ligne
depuis php, ça vous donnera au moins une indication.
Bonjour, Dans un dossier, j'ai plusieurs images : $ ls -al '/Users/yt/Sites/tests/Flipping_image/photos/' total 4848 drwxr-xr-x 10 yt staff 340B 13 déc 09:46 . drwxr-xr-x 10 yt staff 340B 13 déc 07:48 .. -rw-r--r-- 1 yt staff 1,1M 12 déc 10:01 20161202_085945.jpg -rw-r--r-- 1 yt staff 66K 13 déc 08:10 Cirques.jpg -rw-r--r-- 1 yt staff 662K 13 déc 08:27 Cirques.png -rw-r--r-- 1 yt staff 541K 6 déc 13:43 IMG_3130.JPG qui ont donc même use:group et mes droits "-rw-r--r--". je dois lire les dats exif de ces images, pour cela j'utilise : $cmd = "$EXIFTOOL " . $data['PATH']; exec($cmd, $Infos, $ExitStatus); foreach($Infos as $line) { $fields = explode(' : ', $line, 2 ); if(count($fields) == 2) { $data[rtrim($fields[0])] = $fields[1]; } } $data['ExitStatus'] = $ExitStatus; pour les trois images : Cirques.jpg Cirques.png IMG_3130.JPG j'ai les bonnes infos, du genre : { "ExifTool Version Number": "10.20", "File Name": "IMG_3130.JPG", "Directory": "/Users/yt/Sites/tests/Flipping_image/photos", "File Size": "541 kB", [...] "Hyperfocal Distance": "1.82 m", "Light Value": "4.0", "ExitStatus": 0 } MAIS, pour l'image : 20161202_085945.jpg mon script ne donne rien en sortie... je ne vois pas pourquoi d'autant qu'au terminal, par un : $ exiftool /Users/yt/Sites/tests/Flipping_image/photos/20161202_085945.jpg j'obtiens des données correctes. est-ce que ça pourrait provenir de la taille de l'image ? ici 1,1Mo je n'ai pas d'erreur, dans mon php.ini, j'ai : error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT et ma version de php est 5.6.25 sur macOS Sierra. Au cas où vous auriez une indication surtout sur comment chercher ce problème.
C'est bizarre, votre truc. La première chose à voir, c'est la taille de l'image, pas son poids. En effet, c'est un problème courant, les fonctions de base de traitement d'images jpeg qui sont pratiquement incontournables commencent par créer en mémoire un bitmap pouvant héberger l'image. Et généralement *en php*, c'est là que ça saute. Ça doit également mal se passer, en mutualisé par exemple, quand la mémoire est comptée. La fonction de base dispose d'une option qui permet de mapper la mémoire sur le disque au-dessus d'une certaine valeur, et cette option est relayée par certains programmes. Voyez pour exiftool ce qu'il en est. Mais ceci n'explique rien dans votre cas. Votre contexte mémoire est-il différent entre un terminal et exec() ? J'ai tendance à penser non, mais pourtant... Vous pourriez essayer de lancer un script qui appelle exiftools et écrit le résultat sur le disque, puis lire ce résultat. Si vous pouvez faire à la main: exiftool bla/bla.jpg > temp.txt et que vous ne pouvez pas exécuter un script avec cette seule ligne depuis php, ça vous donnera au moins une indication. -- Pierre Maurette
oui, j'ai +/- trouvé le pb, il semblerait qu'un (et un seul caractère) pose problème, c'est le ® (Pour Photoshop TradeMark) il doit-être encodé en Latin1 d'où le ? dans un carré au terminal. l'ennui pour moi, c'est que ce truc me semble scpécifique à ce téléphone mobile. pour un iPhone, ou mon nikon, je n'ai jamais rencontré ce pb. peut-être une solution, pour moi, serait de détecter la marque et le modèle de l''appareil et de faite un -charset=<encodage qui va bien> en fonction de la marque et du modèle. car, si je ne lis pas le Comment pour cette photo-là, c'est bon. Donc j'ai déjà changé mon script php pour ne lire que ce qui m'intéresse, ce qui me donne des options à rallonge : $SHORT_INFOS = array(); $SHORT_INFOS['XMP'] = ['Lens']; $SHORT_INFOS['EXIF'] = explode(' ', 'Make Model ExposureTime FNumber ISO FlashMode FocalLength UserComment'); $LONG_INFOS = array(); $LONG_INFOS['File'] = explode(' ', 'FileName Directory FileSize ImageWidth ImageHeight'); $LONG_INFOS['XMP'] = ['Lens']; $LONG_INFOS['EXIF'] = explode(' ', 'Make Model Orientation XResolution YResolution ExposureTime FNumber ISO CreateDate FocalLength UserComment ExposureMode WhiteBalance GPSVersionID GPSLatitudeRef GPSLongitudeRef GPSAltitudeRef GPSTimeStamp GPSSpeedRef GPSSpeed GPSImgDirectionRef GPSImgDirection GPSDestBearingRef GPSDestBearing GPSDateStamp GPSHPositioningError GPSAltitude GPSDateTime GPSLatitude GPSLongitude GPSPosition'); $LONG_INFOS['MakerNotes'] = explode(' ', 'ImageBoundary Timezone DaylightSavings LensType Lens FlashMode ShootingMode'); $data['short_options'] = getOptions($SHORT_INFOS); $data['long_options'] = getOptions($LONG_INFOS); avec "getOptions" qui fabrique les options : function getOptions($tab) { $out = ' '; foreach ($tab as $key => $fields){ foreach($fields as $field) { $out .= "-$key:$field "; } } return $out; } ce qui me paraît vraiment bizarre et que l'exec ne retourne pas d'exitstatus, ça hang indéfiniment... j'ai perdu pas mal de temps sur ce truc inutile...
Le 15/12/2016 à 17:34, Pierre Maurette a écrit :
C'est bizarre, votre truc.
oui, j'ai +/- trouvé le pb, il semblerait qu'un (et un seul caractère)
pose problème, c'est le ® (Pour Photoshop TradeMark) il doit-être encodé
en Latin1 d'où le ? dans un carré au terminal.
l'ennui pour moi, c'est que ce truc me semble scpécifique à ce téléphone
mobile.
pour un iPhone, ou mon nikon, je n'ai jamais rencontré ce pb.
peut-être une solution, pour moi, serait de détecter la marque et le
modèle de l''appareil et de faite un -charset=<encodage qui va bien> en
fonction de la marque et du modèle.
car, si je ne lis pas le Comment pour cette photo-là, c'est bon.
Donc j'ai déjà changé mon script php pour ne lire que ce qui
m'intéresse, ce qui me donne des options à rallonge :
$SHORT_INFOS = array();
$SHORT_INFOS['XMP'] = ['Lens'];
$SHORT_INFOS['EXIF'] = explode(' ', 'Make Model ExposureTime FNumber ISO
FlashMode FocalLength UserComment');
oui, j'ai +/- trouvé le pb, il semblerait qu'un (et un seul caractère) pose problème, c'est le ® (Pour Photoshop TradeMark) il doit-être encodé en Latin1 d'où le ? dans un carré au terminal. l'ennui pour moi, c'est que ce truc me semble scpécifique à ce téléphone mobile. pour un iPhone, ou mon nikon, je n'ai jamais rencontré ce pb. peut-être une solution, pour moi, serait de détecter la marque et le modèle de l''appareil et de faite un -charset=<encodage qui va bien> en fonction de la marque et du modèle. car, si je ne lis pas le Comment pour cette photo-là, c'est bon. Donc j'ai déjà changé mon script php pour ne lire que ce qui m'intéresse, ce qui me donne des options à rallonge : $SHORT_INFOS = array(); $SHORT_INFOS['XMP'] = ['Lens']; $SHORT_INFOS['EXIF'] = explode(' ', 'Make Model ExposureTime FNumber ISO FlashMode FocalLength UserComment'); $LONG_INFOS = array(); $LONG_INFOS['File'] = explode(' ', 'FileName Directory FileSize ImageWidth ImageHeight'); $LONG_INFOS['XMP'] = ['Lens']; $LONG_INFOS['EXIF'] = explode(' ', 'Make Model Orientation XResolution YResolution ExposureTime FNumber ISO CreateDate FocalLength UserComment ExposureMode WhiteBalance GPSVersionID GPSLatitudeRef GPSLongitudeRef GPSAltitudeRef GPSTimeStamp GPSSpeedRef GPSSpeed GPSImgDirectionRef GPSImgDirection GPSDestBearingRef GPSDestBearing GPSDateStamp GPSHPositioningError GPSAltitude GPSDateTime GPSLatitude GPSLongitude GPSPosition'); $LONG_INFOS['MakerNotes'] = explode(' ', 'ImageBoundary Timezone DaylightSavings LensType Lens FlashMode ShootingMode'); $data['short_options'] = getOptions($SHORT_INFOS); $data['long_options'] = getOptions($LONG_INFOS); avec "getOptions" qui fabrique les options : function getOptions($tab) { $out = ' '; foreach ($tab as $key => $fields){ foreach($fields as $field) { $out .= "-$key:$field "; } } return $out; } ce qui me paraît vraiment bizarre et que l'exec ne retourne pas d'exitstatus, ça hang indéfiniment... j'ai perdu pas mal de temps sur ce truc inutile...
peut-être une solution, pour moi, serait de détecter la marque et le modèle de l''appareil et de faite un -charset=<encodage qui va bien> en fonction de la marque et du modèle.
ce qui nécessiterait deux passes d'exxiftool, une pour lire marque et modèle et l'autre pour corriger le tir...
Le 15/12/2016 à 19:11, Une Bévue a écrit :
peut-être une solution, pour moi, serait de détecter la marque et le
modèle de l''appareil et de faite un -charset=<encodage qui va bien> en
fonction de la marque et du modèle.
ce qui nécessiterait deux passes d'exxiftool, une pour lire marque et
modèle et l'autre pour corriger le tir...
peut-être une solution, pour moi, serait de détecter la marque et le modèle de l''appareil et de faite un -charset=<encodage qui va bien> en fonction de la marque et du modèle.
ce qui nécessiterait deux passes d'exxiftool, une pour lire marque et modèle et l'autre pour corriger le tir...
Une Bévue
Le 15/12/2016 à 17:34, Pierre Maurette a écrit :
Vous pourriez essayer de lancer un script qui appelle exiftools et écrit le résultat sur le disque, puis lire ce résultat. Si vous pouvez faire à la main: exiftool bla/bla.jpg > temp.txt et que vous ne pouvez pas exécuter un script avec cette seule ligne depuis php, ça vous donnera au moins une indication.
quelqu'un a regardé l'encodage pour moi, c'est MacRoman ***uniquement*** pour le caractère ® représenté par � (codé par A8 dans le fichier photo) sur mon terminal qui marche en UTF-8. avec exiftool j'ai essayé de changer l'encodage interne en MacRoman par : -charset exif=MacRoman -charset iptc=MacRoman -charset id3=MacRoman -charset photoshop=MacRoman -charset quicktime=MacRoman (successivement) (conseil d'Olivier Miakinen) mais ça n'a rien changé. je n'ai donc pas de solution, mise à part ne pas lire le champs Comment...
Le 15/12/2016 à 17:34, Pierre Maurette a écrit :
Vous pourriez essayer de lancer un script qui appelle exiftools et écrit
le résultat sur le disque, puis lire ce résultat. Si vous pouvez faire à
la main:
exiftool bla/bla.jpg > temp.txt
et que vous ne pouvez pas exécuter un script avec cette seule ligne
depuis php, ça vous donnera au moins une indication.
quelqu'un a regardé l'encodage pour moi, c'est MacRoman ***uniquement***
pour le caractère ® représenté par � (codé par A8 dans le fichier photo)
sur mon terminal qui marche en UTF-8.
avec exiftool j'ai essayé de changer l'encodage interne en MacRoman par :
Vous pourriez essayer de lancer un script qui appelle exiftools et écrit le résultat sur le disque, puis lire ce résultat. Si vous pouvez faire à la main: exiftool bla/bla.jpg > temp.txt et que vous ne pouvez pas exécuter un script avec cette seule ligne depuis php, ça vous donnera au moins une indication.
quelqu'un a regardé l'encodage pour moi, c'est MacRoman ***uniquement*** pour le caractère ® représenté par � (codé par A8 dans le fichier photo) sur mon terminal qui marche en UTF-8. avec exiftool j'ai essayé de changer l'encodage interne en MacRoman par : -charset exif=MacRoman -charset iptc=MacRoman -charset id3=MacRoman -charset photoshop=MacRoman -charset quicktime=MacRoman (successivement) (conseil d'Olivier Miakinen) mais ça n'a rien changé. je n'ai donc pas de solution, mise à part ne pas lire le champs Comment...