2013-04-29 7 views
26

Ich führe ein Python-Skript, aber es wird das Bild nicht angezeigt.Image.show() wird das Bild nicht anzeigen

Ich habe ein apple.jpg Bild in einem Verzeichnis mit diesem Programm und es sollte das Bild zeigen, aber es funktioniert nicht. Hier ist der Code:

#!/usr/bin/env python 

from PIL import Image 

Apple = Image.open("apple.jpg") 
Apple.show() 

Mein Betriebssystem ist Ubuntu und dieses Programm wird nur abgeschlossen, ohne einen Fehler anzuzeigen.

+0

Was ist der Fehler/Effekt? –

+0

Was ist Ihr Betriebssystem und Python-Version? Sehen Sie Fehlermeldungen? – piokuc

+3

Wahrscheinlich liegt dies daran, dass Ihnen in Ihrem Betriebssystem ein Standard-Image-Viewer fehlt, vorausgesetzt, Sie verwenden Linux. PIL hängt stark davon ab, ob Ihr Betriebssystem Ihr Bild "rendert". Sehen Sie, ob dies eine bessere Vorgehensweise ist, wenn Sie nur ein Bild anzeigen und auf die Bilddaten zugreifen möchten: http://stackoverflow.com/questions/11390596/how-to-display-image-in-pygame – Torxed

Antwort

35

Es funktioniert für mich auf Ubuntu. Es zeigt das Bild mit ImageMagick an. Versuchen Sie Folgendes:

+1

Nachdem ich das getan habe, funktioniert es dank – user2131116

+0

@ user2131116: Cool. Froh, dass ich Helfen kann. –

+0

Für mich funktioniert auch nach der Installation nicht ... :( – Kyrol

0

Es kann sein, dass Sie keine Standard-Bildbetrachter festgelegt haben. Versuchen Sie, die Bilddatei außerhalb des Programms zu öffnen und zu überprüfen, ob Sie aufgefordert werden, ein Programm auszuwählen, oder ob es nur in einem anderen Programm geöffnet wird.

+0

Eine gute Vermutung, aber PIL scheint nicht den Standard-Bildbetrachter zu verwenden. Es * Soll * aber nicht. Zumindest nicht für eine sinnvolle Definition von "Default". :) –

+0

Ich mache das schon mal, das Bild kann offen sein und sehen, aber wenn ich dieses Programm ausführe, funktioniert es immer noch nicht. – user2131116

-1

PIL ist an diesem Punkt ziemlich abandonedware. Sie sollten in Erwägung ziehen, den Nachfolger pillow zu verwenden, der über easy_install oder pip heruntergeladen werden kann.

auf ubuntu, würde ich vorschlagen, die folgenden:

  1. Wenn Sie noch nicht pip haben, installieren Sie es durch apt-get: sudo apt-get install python-pip
  2. installieren Kissen: pip install pillow --user

Von dort sollten Sie in der Lage sein, Kissen zu installieren und seine Image Klasse in der gleichen Weise zu verwenden.

+0

Kissen verhält sich in diesem Fall nicht anders. –

+0

@LennartRebebro, Sprechen Sie für OP? Ich fürchte, ich folge nicht. Bildanzeigeprobleme verschiedener Art werden oft durch Umschalten auf Kissen gelöst. – blz

+0

Es ist keine Meinung, also sehe ich nicht, wie "sprechen für" hier gilt. Dies wird nicht durch den Wechsel zu Pillow gelöst. –

9

Ich weiß, es ist eine alte Frage, aber hier ist, wie ich es in Ubuntu repariert, falls jemand das gleiche Problem hat und nicht imagemagick installieren will (was die Grundursache des Problems sowieso nicht behebt).

Der Standard-Viewer auf Ubuntu kann im Terminal mit dem Befehl „EOG“ gestartet werden. Pillow sucht standardmäßig nur nach den Befehlen "xv" und "display", letzteres wird von imagemagick bereitgestellt. Wenn Sie imagemagick installieren, öffnet das Aufrufen von "display" das Bild tatsächlich. Aber warum nicht den Viewer verwenden, den wir bereits haben?

Der Python-Code zum Öffnen des Viewers finden Sie in lib/python3.4/site-packages/PIL/ImageShow.py (oder dem Äquivalent Ihrer Python-Installation). Blättern Sie nach unten auf unter Zeile # 155 und finden Sie den Codeblock Spruch:

class DisplayViewer(UnixViewer): 
    def get_command_ex(self, file, **options): 
     command = executable = "display" 
     return command, executable 

if which("display"): 
    register(DisplayViewer) 

Kopieren Sie, dass Block und fügen Sie ihn direkt unter, die Änderung der „display“ Befehl Ubuntus „EOG“ Befehl:

class DisplayViewer(UnixViewer): 
    def get_command_ex(self, file, **options): 
     command = executable = "eog" 
     return command, executable 

if which("eog"): 
    register(DisplayViewer) 

Nach dem Speichern von ImageShow.py sollte Pillow Bilder() im Standard-Viewer korrekt anzeigen.

+1

Das hat perfekt funktioniert! Warum wurde es überhaupt auf "Display" eingestellt? Wenn Sie diese Änderung an der Datei vorgenommen haben, wird etwas anderes möglicherweise später nicht funktionieren, da es "display" und nicht "eog" erwartet hat? –

+0

Ausgezeichnet. Persönlich denke ich, das ist besser als die angenommene Antwort, ich bevorzuge 'eog' auch. Ich nehme an, dass Sie nie einen Weg gefunden haben, den Quellcode nicht zu ändern? [PIL image.show] (http://pillow.readthedocs.io/en/3.2.x/reference/Image.html#PIL.Image.Image.show) klingt wie eine Option (aber ich konnte nicht Mach es nicht zur Arbeit. Auch @Rafael_Espericueta - wenn ich raten musste, zogen es die PIL-Entwickler wahrscheinlich vor, 'ImageMagick' zu erstellen, da es im Gegensatz zu'Eog' Bearbeitungsmöglichkeiten hatte. Schließlich war _image.show() _ "hauptsächlich für Debugging-Zwecke gedacht". –

4

hoffe ich, was ich fand, here jemandem nützlich sein kann, ist es für mich gearbeitet. Es wird erläutert, dass, wenn der Standard-Viewer keine Kommandozeilenbilddateien akzeptieren, können Sie den Web-Browser-Modul verwenden, um das Bild zu zeigen:

import Image 

# Apple = Image.open("apple.jpg")  
# Apple.show() 
# instead of using .open and .show(), 
# save the image to show it with the webbrowser module 

filename = "apple.jpg" 
import webbrowser 
webbrowser.open(filename) 
+0

+1, weil dies den Dateinamen als Titel für das Viewer-Fenster verwendet, im Gegensatz zu imagemagick, das einen tmp-Datei-Kauderwelsch-Namen verwendet. Den Dateinamen zu sehen, war etwas, was ich irgendwie brauchte. So dass dieses Imagemagick für mich funktioniert hat, löste das ein weiteres Problem. –

2

Dies ist eine alte Frage, aber es mich für eine Weile abgehört hat. Das ist meine Lösung:

Ich führe Python 2.7 auf Linux Mint und beim Aufruf Image.show() passiert nichts. Auf meinem System ist der Standard-Viewer "Image Viewer", der in bash "eog" genannt wird. Mein Python denkt, dass ich etwas anderes benutze, vielleicht "xv". Öffnen Sie also ein Terminal und führen Sie

sudo gedit /usr/lib/python2.7/dist-packages/PIL/ImageShow.py 

Suche nach "xv" und ersetzen Sie es durch "eog".

Speichern Sie die Datei und Image.show() funktioniert gut (für Debugging-Zwecke).

1

Was für mich gearbeitet wurde:

brew install imagemagick