Python Imaging Library шоу () в Windows - PullRequest
       9

Python Imaging Library шоу () в Windows

6 голосов
/ 20 января 2012

Я работаю над сценарием, который загружает различные файлы изображений из Интернета, а затем выполняет их обработку с помощью PIL. Сценарий использует urlretreive для выгрузки изображений во временные файлы, и сейчас я просто пытаюсь открыть их в средстве просмотра, используя метод PIL image.show (). Вот соответствующая часть кода:

def main():

link_queue = Queue.Queue()
image_queue = Queue.Queue()

links = get_image_links('test_search')

for link in links:
    link_queue.put(link)

for image in xrange(len(links)):
    #create image downloading threads
    t = ImageDownloadingThread(link_queue, image_queue)
    t.setDaemon(True)
    t.start()

link_queue.join()

image_data = image_queue.get()
image_file, image_url = image_data[0][0], image_data[1][0] 
#get the first image downloaded and take a look
image = Image.open(image_file)
image.show()

К сожалению, хотя временный файл, кажется, загружается нормально (Image.open не возвращает ошибок), я ничего не получаю во вьюере, когда вызывается image.show ():

enter image description here

Я также попытался открыть локальные, не временные файлы, на случай, если это было частью проблемы, и получил тот же результат. Операционная система - Windows Vista 32 бит SP2. Есть идеи, что может пойти не так?

1 Ответ

7 голосов
/ 20 января 2012

show() пытается запустить средство просмотра изображений по умолчанию с помощью команды start /wait для временного файла изображения. Предполагается, что параметр /wait ожидает завершения просмотра, чтобы можно было удалить файл. К сожалению, средство просмотра по умолчанию в Vista и Windows 7 не отвечает должным образом на /wait и возвращается даже до того, как они открыли файл; файл будет удален, прежде чем его можно будет отобразить.

Обычное исправление - отредактировать ImageShow.py в пакете PIL и добавить дополнительную команду, чтобы подождать несколько секунд перед удалением файла. Это клудж, но он работает большую часть времени. Подробности на speedreviews.com и здесь на StackOverflow .

Другой способ исправить это - связать формат файла .bmp с программой, которая ожидает корректно перед возвратом, например, mspaint.exe.

...