Closed domlysz closed 8 years ago
Salut,
tu as eu ce problème en chargeant quel fichier ? (si tu pouvais me l'envoyer) As-tu essayé sur linux avec une autre image ?
merci
En PJ, 3 fichiers tests sur une bande, tous ont fonctionnés sous windows. J'ai essayé d'autre type de fichier sous linux (RGBA notamment) mais j'obtiens toujours la même erreur.
essaye en remplaçant la ligne 58 : _typ = TYPES[typ][0] par : _typ = TYPES.get(typ, ("H", "UBYTE"))[0]
ça passe pour cette ligne mais j'ai une nouvelle erreur à la 71
value, = struct.unpack(byteorder+"L", data)
struct.error: unpack requires a bytes object of length 4
Si tu utilises directement la fonction _read_IFD ou la fonction from_buffer, fileobj doit être un fichier ouvert en mode "rb".
Je passe par la fonction open donc le fichier est bien ouvert en mode rb
Je pense que le tag est mal écrit dans le fichier, insère après la ligne 53: print(tag, typ, count) que je puisse voir ce qui et lu...
J'ai fais quelques test et il me semble que c'est un bug de python sur linux 64.
sur Windows 32 et 64 bits ça fonctionne sur linux 32 ça fonctionne sur linux 64 ça reproduit la même erreur
Essaye avec la version 3.5 de python sur Linux
Bon, j'ai testé sur une version 2.7 et une 3.5 mais toujours la même erreur.
print(tag, typ, count) me renvoi
256 3 1
1 0 170
il plante à la deuxième itération
Je ne sais pas si ça peut aider, mais je n'ai aucun problème de lecture avec piexif et exifread.
Le 1er projet ne permet pas de lire les geotags (pas de support du type "double") en revanche pour le second, il y a une pull request intéressante "Use struct for all packing/unpacking", du coup j'arrive à lire les geotags en les ajoutant dans la list des exifs
Je pense avoir trouvé la solution. essaye en remplaçant la ligne 55 : data = fileobj.read(struct.calcsize("L")) par : data = fileobj.read(struct.calcsize("=L"))
Le fait d'ajouter le signe '=' impose à python d'utiliser les normes de 'sizeof' du compilateur C (et du coup non liées à la plateforme).
Super ça fonctionne avec cette modif !
Merci beaucoup pour le support
Salut,
Ce problème n'apparait que sur une machine linux, le même fichier se lit correctement sur windows.
Ci-dessous le message d'erreur:
File "/usr/local/lib/python3.4/dist-packages/Tyf/__init__.py", line 58, in _read_IFD
typ = TYPES[typ][0]
KeyError: 0
Dispo si besoin d'infos complémentaires
Merci