Как исправить эти ошибки ввода-вывода при создании миниатюры из пути к файлу в PIL (Python Imaging Library) - PullRequest
2 голосов
/ 16 июня 2011

Я пытаюсь создать в 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

1 Ответ

1 голос
/ 16 июня 2011

Моя установка PIL делает то же самое.(PIL 1.1.7, Py 2.6, OSX 10.6)

РЕДАКТИРОВАТЬ: Ах - установка на другом компьютере OSX работает.Я знаю, что есть проблемы со сборкой PIL с поддержкой JPG в OSX, но я не могу вспомнить, каков был источник каждой из двух установок, поэтому я не могу сказать вам, как это исправить.

РЕДАКТИРОВАТЬ 2: Насколько я помню, сборка PIL с инструкциями здесь дала работающую установку.Команды build и install должны были запускаться sudo, и три вызова gcc должны были быть изменены вручную, чтобы удалить опцию «-arch ppc» и повторить запуск.

А вот другой маршрут к зданию ПИЛ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...