Wie zeige ich PIL-Bilder auf dem Bildschirm?

79

Ich bearbeite Bilder mit der PIL-Bibliothek. Der Punkt ist, dass ich das Bild nicht jedes Mal auf meiner Festplatte speichern möchte, um es im Explorer anzuzeigen. Gibt es ein kleines Modul, mit dem ich einfach ein Fenster einrichten und das Bild anzeigen kann?

Bartlomiej Lewandowski
quelle
Bild wie anzeigen ? In einem Browser?
in einem Python-Fenster. So etwas wie ein Fenster aus Pygame. Ich könnte es im Pygame machen, aber ich hätte gerne eine bessere Lösung.
Bartlomiej Lewandowski
1
warum willst du es nicht speichern?
Joran Beasley
1
Nehmen wir an, ich habe 100 kleine Bilder zum Durchschauen. Es wäre besser, wenn ich sie alle auf meinem Bildschirm drucken lassen könnte, ohne sie in einem anderen Programm öffnen zu müssen. Ich bin mit wxpython nicht wirklich vertraut. Ist es einfach
Bartlomiej Lewandowski
1
Sie benötigen eine Fensterbibliothek - ob Pygame, wxPython, TkInter, PyQt, PyGtk, PyWin32, PyObjC usw. -, um ein Fenster zu öffnen. Sobald Sie ein Fenster geöffnet haben, ist es für die meisten von ihnen trivial, ein Bild in diesem Fenster anzuzeigen.
abarnert

Antworten:

109

Aus dem PIL-Tutorial :

Sobald Sie eine Instanz der Image- Klasse haben, können Sie die von dieser Klasse definierten Methoden verwenden, um das Image zu verarbeiten und zu bearbeiten. Lassen Sie uns zum Beispiel das gerade geladene Bild anzeigen:

     >>> im.show()

Aktualisieren:

Heutzutage ist die Image.show()Methode in der Pillow-Gabel von PIL formal dokumentiert und erklärt, wie sie auf verschiedenen Betriebssystemen implementiert ist.

Martineau
quelle
Es ist eigentlich das, wonach ich gesucht habe, aber ich erhalte einen Windows Live-Fotogalerie-Fehler. 0x800706ba
Bartlomiej Lewandowski
3
Dies liegt daran, dass die Windows-Live-Fotogalerie mit dem Typ der temporären Datei PIL verknüpft ist, die beim Aufrufen der Methode erstellt wurde. Unter Windows wird wahrscheinlich standardmäßig .bmp verwendet, was viele der Funktionen moderner Bilddateiformate nicht unterstützt. Versuchen Sie, das Bildformatattribut im.format = "PNG"vor dem im.show()Aufruf explizit auf .png (dh ) zu setzen .
Martineau
Trotzdem bleibt das Problem bestehen. Ich könnte tatsächlich eine Fensterbibliothek ausprobieren.
Bartlomiej Lewandowski
3
Die in PIL integrierte show()Methode ist die einfachste Version des "Skripts eines anderen Programms, um es anzuzeigen". (Auf früheren Windows-Systemen hatten Sie eine ganze Reihe von MSPaint-Fenstern.) Es hat sich gelohnt, Vorschläge zu machen und es zu versuchen, auch wenn es nicht funktioniert hat. Sie könnten tatsächlich etwas Ähnliches und fast genauso Einfaches tun, indem Sie beispielsweise MSPaint.exe explizit für jedes Bild starten…
abarnert
3
@abarnert: Eigentlich klingt das Problem wie ein Fehler in der Windows Live Photo Gallery 2011 und es gibt eine neuere Version, die heruntergeladen werden kann, um das PIL- show()Problem zu beheben .
Martineau
21

Ich habe das getestet und es funktioniert gut für mich:

from PIL import Image
im = Image.open('image.jpg')
im.show()
Harvey
quelle
1
Während dies die Frage beantworten kann (ungetestet), ist es empfehlenswert, eine Erklärung mit Ihrem Code auf SO bereitzustellen. Es wird davon abgeraten, nur Code-Antworten zu geben.
d_kennetz
2
Dies scheint auf Google Colab Notebook nicht zu funktionieren.
Kawingkelvin
2
@ kawingkelvin Frage war "Wie werden PIL-Bilder auf dem Bildschirm angezeigt?". Sie sollten anderswo nach einer Antwort für Ihre spezielle Situation suchen ... vielleicht hier: stackoverflow.com/questions/55288657/…
Harvey
8

Wenn Sie feststellen, dass PIL auf einigen Plattformen Probleme hat, kann die Verwendung eines nativen Bildbetrachters hilfreich sein.

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

Für MacOS:

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

Für die meisten GNU / Linux-Systeme mit X.Org und einer Desktop-Umgebung:

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

Für Windows:

import os
os.system("powershell -c tmp.png")
Federfüße
quelle
Unter MacOS wird Feather nicht unbedingt in der Vorschau geöffnet, sondern in der Standardeinstellung für den Dateityp. Ich habe mit einigen großen JPG-Dateien gearbeitet, die Preview in .png konvertiert, was ungefähr 20 Sekunden dauerte. Das Ändern der JPG-Standardeinstellung in Chrome hat Wunder gewirkt ...
John White
6

Vielleicht können Sie dafür matplotlib verwenden, Sie können damit auch normale Bilder zeichnen. Wenn Sie show () aufrufen, wird das Bild in einem Fenster angezeigt. Schau dir das an:

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

Puckl
quelle
2

Sie können mit Tkinter ein Bild in Ihrem eigenen Fenster anzeigen, ohne abhängig von den auf Ihrem System installierten Bildbetrachtern:

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()

Für Python 3, ersetzen import Tkinter as tkmit import tkinter as tk.

Apostolos
quelle
2
Wo haben Sie gesehen, dass der Code das Speichern des Images auf der Festplatte beinhaltet? In der Frage wird nach einer Möglichkeit gefragt, ein Bild zu bearbeiten, ohne es jedes Mal auf der Festplatte speichern zu müssen. Sie müssen das Image jedoch zu Beginn mindestens einmal von der Festplatte öffnen. Anschließend können Sie das in den Speicher geladene Image so oft verarbeiten und anzeigen, wie Sie möchten, ohne dass eine Festplattenoperation erforderlich ist.
Apostolos