【发布时间】:2011-06-17 02:45:09
【问题描述】:
我正在尝试在 python 中创建一个简单的函数,它可以接收文件路径和输出文件路径,然后为在文件路径中找到的图像制作 64x64 缩略图并将缩略图保存到输出文件路径。这是我的完整代码:
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") #Save 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")
问题是这段代码对于某些图像可以正常工作,但会在我调用“im.thumbnail(size, Image.ANTIALIAS)”的行上引发 IOError。这是上面程序的输出。
TEST 1
image successfully opened
I/O error
None
TEST 2
image successfully opened
made thumbnail
test_images/cat2_thumbnail.png
您会注意到,在第一个测试中,在打开图像之后但在创建缩略图之前会引发 I/O 错误。在第二次测试中没有抛出错误,并且缩略图实际上成功保存到了输出路径。无论我以什么顺序调用这两个不同的测试,或者如果我将其中一个注释掉并单独运行另一个,结果总是 TEST 1 失败而 TEST 2 成功。 cat1.jpg 和 cat2.jpg 似乎都是有效的 JPEG 图像,除了文件名和实际图片内容之外,我真的找不到它们之间的任何不同之处。
如果有人想用我的图片试试,我从这里下载了 cat1:http://dellone2one.com/wp-content/uploads/2009/11/angry_wet_cat.jpg
我从这里下载了 cat2:http://cvcl.mit.edu/hybrid/cat2.jpg
编辑添加完整的回溯,无需处理: 这是完整的回溯
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
【问题讨论】:
-
如果您删除了异常处理并发布了完整的回溯,这将有所帮助。
-
我的 PIL 版本似乎有问题。你同意吗?
标签: python python-imaging-library ioerror