Як показати зображення PIL на екрані?


82

Я роблю деяке редагування зображень за допомогою бібліотеки PIL. Справа в тому, що я не хочу щоразу зберігати зображення на своєму жорсткому диску, щоб переглянути його в Провіднику. Чи є невеликий модуль, який просто дозволяє мені встановити вікно та відобразити зображення?


Показувати зображення як ? У браузері?

у вікні, зробленому пітоном. Щось на зразок вікна з пігаме. Я міг би це зробити в pygame, але хотів би кращого рішення.
Бартломій Левандовський

1
чому ти не хочеш його зберегти?
Джоран Бізлі,

1
скажімо, у мене є 100 маленьких малюнків, які потрібно переглянути. Було б краще, якби я міг роздрукувати їх усі на своєму екрані, не відкриваючи їх в якійсь іншій програмі. Я не дуже знайомий з wxpython. Це просто?
Бартломій Левандовський

1
Вам знадобиться якась бібліотека вікон - будь то pygame, wxPython, TkInter, PyQt, PyGtk, PyWin32, PyObjC тощо - для відкриття вікна. Після того, як ви відкрили вікно, більшість із них роблять тривіальним відображення зображення у цьому вікні.
abarnert

Відповіді:


116

З підручника PIL :

Отримавши екземпляр класу Image , ви можете використовувати методи, визначені цим класом, для обробки та маніпулювання зображенням. Наприклад, давайте покажемо зображення, яке ми щойно завантажили:

     >>> im.show()

Оновлення:

На сьогоднішній день Image.show()метод офіційно задокументований у Pillow fork PIL разом із поясненням того, як він реалізований на різних ОС.


це насправді те, що я шукав, але я отримую помилку Windows Photo Gallery. 0x800706ba
Бартломій Левандовський

3
Це тому, що фотогалерея Windows Live асоціюється з типом тимчасового файлу PIL, створеного під час виклику методу, - який, імовірно, за замовчуванням має значення .bmp у Windows, який не підтримує багато можливостей сучасних форматів файлів зображень. Спробуйте встановити атрибут формату зображення явно .png (тобто im.format = "PNG") перед im.show()викликом.
martineau

проблема все ще залишається. Я міг би спробувати віконну бібліотеку.
Бартломій Левандовський

3
Вбудований show()метод PIL - це найпростіша з можливих версій "сценарію, який показує інша програма". (У попередніх системах Windows у вас вийшло ціла купа вікон MSPaint.) Варто було запропонувати та спробувати, навіть якщо це не спрацювало. Ви насправді можете зробити щось подібне, і майже так само просто, скажімо, явно запустивши MSPaint.exe на кожному зображенні ...
abarnert

3
@abarnert: Насправді проблема звучить як помилка у Windows Live Photo Gallery 2011, і є нова версія, яку можна завантажити, що може виправити show()проблему PIL .
martineau

22

Я перевірив це, і це добре для мене працює:

from PIL import Image
im = Image.open('image.jpg')
im.show()

1
Хоча це може дати відповідь на запитання (неперевірене), найкращою практикою є надання пояснення з вашим кодом на SO. Насправді не рекомендується давати відповіді лише на код.
d_kennetz

2
Здається, це не працює на ноутбуці Google Colab.
kawingkelvin

2
Питання @kawingkelvin було "Як показати зображення PIL на екрані?". Вам слід шукати відповіді на свою конкретну ситуацію в іншому місці ... можливо, тут: stackoverflow.com/questions/55288657/…
Харві

8

Якщо ви виявите, що PIL має проблеми на деяких платформах, може допомогти використання власного засобу перегляду зображень.

img.save("tmp.png") #Save the image to a PNG file called tmp.png.

Для MacOS:

import os
os.system("open tmp.png") #Will open in Preview.

Для більшості систем GNU / Linux із X.Org та робочим середовищем:

import os
os.system("xdg-open tmp.png")

Для Windows:

import os
os.system("powershell -c tmp.png")

Перо, на MacOS він не обов'язково відкриється у попередньому перегляді, а за замовчуванням для типу файлу. Я працював із великими файлами jpg, які попередній перегляд перетворює у .png, займаючи близько 20 секунд. Зміна типового jpg на Chrome творила чудеса ...
Джон Уайт

6

Можливо, ви можете використовувати для цього matplotlib, ви також можете побудувати на ньому звичайні зображення. Якщо ви викликаєте show (), зображення з’являється у вікні. Погляньте на це:

http://matplotlib.org/users/image_tutorial.html


2

Ви можете відобразити зображення у власному вікні за допомогою Tkinter, без використання програм перегляду зображень, встановлених у вашій системі:

import Tkinter as tk
from PIL import Image, ImageTk  # Place this at the end (to avoid any conflicts/errors)

window = tk.Tk()
#window.geometry("500x500") # (optional)    
imagefile = {path_to_your_image_file}
img = ImageTk.PhotoImage(Image.open(imagefile))
lbl = tk.Label(window, image = img).pack()
window.mainloop()

Для Python 3 замініть import Tkinter as tkна import tkinter as tk.


2
Де ви побачили, що код передбачає збереження зображення на диск ??? Питання задає спосіб редагування зображення без необхідності кожного разу зберігати його на диску. Але ви повинні відкрити образ із диска хоча б раз на початку. Потім ви можете обробляти та переглядати зображення, завантажене в пам'ять, як "img" скільки завгодно разів, без участі будь-якої операції на диску.
Апостолос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.