开发者

How to fix these IOErrors when creating a thumbnail from a filepath in PIL (Python Imaging Library)

I am trying to make a simple function in python that can take in a filepath and an outputfilepath, and then make a 64x64 thumbnail for the image found at filepath and save the thumbnail to outputfilepath. Here is my entire code:

def create_thumbnail2(filepath, outputpath):
    if not os.path.exists(filepath):
        print "Input file path for create_thumbnail doesn't exist. Returning None"
        return None

    try:
        size = 64, 64 #Will be making a 64x64 thumbnail                                                                                           
        im = Image.open(filepath)
        print "image successfully opened"
        im.thumbnail(size, Image.ANTIALIAS)
        print "made thumbnail"
        im.save(outputpath, "PNG") #Sa开发者_如何学运维ve image as a PNG                                                                                           
        return outputpath
    except IOError:
        print "I/O error"
        return None

print "TEST 1"
filep = "test_images/cat1.jpg"
print create_thumbnail2(filep, "test_images/cat1_thumbnail.png")

print "\nTEST 2"
filep = "test_images/cat2.jpg"
print create_thumbnail2(filep, "test_images/cat2_thumbnail.png")

The problem is that this code will work fine for some images, but will raise an IOError on the line where I call "im.thumbnail(size, Image.ANTIALIAS)". Here is the output of the above program.

TEST 1
image successfully opened
I/O error
None

TEST 2
image successfully opened
made thumbnail
test_images/cat2_thumbnail.png

You'll notice that in the first test, the an I/O Error is thrown after the image is opened but before a thumbnail is created. In the second test no error is thrown, and the thumbnail is actually successfully saved to the outputpath. No matter what order I call the two different tests in, or if I comment one out and run the other one alone, the result is always TEST 1 failing and TEST 2 succeeding. Both cat1.jpg and cat2.jpg seem to be valid JPEG images, I can't really find anything different between them besides the file names and the actual picture content.

In case anyone wants to try it with my images, I downloaded cat1 from here: http://dellone2one.com/wp-content/uploads/2009/11/angry_wet_cat.jpg

and I downloaded cat2 from here: http://cvcl.mit.edu/hybrid/cat2.jpg

EDITED TO ADD THE FULL TRACEBACK WITHOUT THE HANDLING: Here is the full traceback

Traceback (most recent call last):
  File "image_utils.py", line 75, in <module>
    print create_thumbnail2(filep, "test_images/cat1_thumbnail.png")
  File "image_utils.py", line 66, in create_thumbnail2
    im.thumbnail(size, Image.ANTIALIAS)
  File "/Users/dylan/arcode/python/arcode/PIL/Image.py", line 1559, in thumbnail
    self.load()
  File "/Users/dylan/arcode/python/arcode/PIL/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/Users/dylan/arcode/python/arcode/PIL/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available


My installation of PIL does the same. (PIL 1.1.7, Py 2.6, OSX 10.6)

EDIT: Ah - the installation on a different OSX machine works. I know there are issues building PIL with JPG support on OSX, but I can't recall what the source of each of the two installations was, so I can't tell you how to fix it.

EDIT 2: My best recollection is that building PIL with something like the instructions here yielded the working installation. The build and install commands had to be run sudo, and three invocations of gcc had to be manually modified to remove the "-arch ppc" option and re-run.

And here's another route to building PIL.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜