Я пытаюсь создать в 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")
Проблема в том, что этот код будет хорошо работать для некоторых изображений, но вызовет IOError в строке, где я называю "im.thumbnail (size, Image.ANTIALIAS)».Вот выходные данные вышеприведенной программы.
TEST 1
image successfully opened
I/O error
None
TEST 2
image successfully opened
made thumbnail
test_images/cat2_thumbnail.png
Вы заметите, что в первом тесте ошибка ввода-вывода выдается после открытия изображения, но до создания эскиза.Во втором тесте ошибка не выдается, и миниатюра фактически успешно сохраняется в выходной путь.Независимо от того, в каком порядке я вызываю два разных теста, или если я закомментирую один и запускаю другой в одиночку, результатом всегда будет 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
EDITED TOДОБАВЬТЕ ПОЛНУЮ ОТДЕЛКУ БЕЗ ОБРАБОТКИ: Вот полная обратная связь
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