2017-03-19 4 views
1

J'essaie d'obtenir un tableau de valeurs RVB pour un fichier JPEG. En utilisant le codePIL pense que chaque image que je lui donne est corrompue

from PIL import Image 
im = Image.open('lion.jpg') 
pix = list(im.getdata())  

donne l'erreur

IOError: broken data stream when reading image file 

L'image dans le code est celui-ci, que je suis arrivé de Google pour les tests: a lion

mais le code renvoie la même erreur pour chaque photo que j'ai essayée, à partir d'une variété de sources (google, téléphone, etc ...). Lorsque je pousse et charge l'image de toute façon, toutes les valeurs de pixels sont noires.

J'ai essayé de faire

from PIL import Image, ImageFile 
ImageFile.LOAD_TRUNCATED_IMAGES = True 

mais tout ce qui ne fait supprimer l'erreur; les valeurs de pixels sont toujours noires.

Il semble que d'autres personnes aient eu ce problème ailleurs, comme here, mais jusqu'à présent, d'autres solutions m'ont échoué. Aucune suggestion?

Je suis sur Mac 10.10, avec python 2.7.8. J'ai d'abord installé Pillow avec pip, puis à partir de la source. J'ai confirmé que libjpeg est installé.

+0

Y at-il une raison que vous utilisez encore Python 2.7 ? Est-ce que 'pip install Pillow' a donné des erreurs? – physicalattraction

Répondre

0

Je n'ai pas vraiment de réponse, mais je peux vous donner la configuration pour laquelle cela fonctionne bien.

Le script suivant:

from PIL import Image 

if __name__ == '__main__': 
    im = Image.open('lion.jpg')) 
    pix = list(im.getdata()) 
    print('The image has {} pixels'.format(len(pix))) 

    import PIL, sys 
    print('Using Python version {}'.format(sys.version)) 
    print('Using PIL version {}'.format(PIL.VERSION)) 
    print('Using Pillow version {}'.format(PIL.PILLOW_VERSION)) 

donne suite sur mon macbook avec OS X El Capitan (10.11.6):

The image has 1183000 pixels 
Using Python version 3.5.1 |Continuum Analytics, Inc.| (default, Dec 7 2015, 11:24:55) 
[GCC 4.2.1 (Apple Inc. build 5577)] 
Using PIL version 1.1.7 
Using Pillow version 3.1.0 

Process finished with exit code 0