2013-04-29 1 views
26

Sto eseguendo uno script python ma non mostrerà l'immagine.Image.show() non visualizzerà l'immagine

Ho un'immagine apple.jpg in una directory con questo programma e dovrebbe mostrare l'immagine, ma non è così. Ecco il codice:

#!/usr/bin/env python 

from PIL import Image 

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

Il mio sistema operativo è Ubuntu e questo programma viene completato senza mostrare alcun errore.

+0

Qual è l'errore/effetto? –

+0

Qual è il tuo sistema operativo e la versione di Python? Vedi qualche messaggio di errore? – piokuc

+3

Molto probabilmente questo è perché non hai un visualizzatore di immagini predefinito nel tuo sistema operativo, supponendo che tu stia utilizzando Linux. PIL dipende molto dal tuo sistema operativo per "renderizzare" la tua immagine. Verifica se questo è un approccio migliore se vuoi solo visualizzare un'immagine e accedere ai dati dell'immagine: http://stackoverflow.com/questions/11390596/how-to-display-image-in-pygame – Torxed

risposta

35

Funziona per me su Ubuntu. Visualizza l'immagine con Imagemagick. Prova questo:

sudo apt-get install imagemagick 
+1

Dopo averlo fatto, funziona grazie – user2131116

+0

@ user2131116: Cool. Felice di aiutare. –

+0

Per me non funziona anche dopo l'installazione ... :( – Kyrol

0

È possibile che non sia impostato un visualizzatore di immagini predefinito. Prova ad aprire il file immagine al di fuori del programma e vedere se ti chiede di selezionare un programma o semplicemente si apre in un altro programma.

+0

Una buona ipotesi, ma PIL non sembra utilizzare il visualizzatore di immagini predefinito. dovrebbe * ma non lo fa. Almeno non per una definizione utile di "Default". :) –

+0

Lo faccio prima, l'immagine può essere aperta e vedere, ma se eseguo questo programma, non funziona ancora. – user2131116

-1

PIL è praticamente abbandonato a questo punto. Dovresti considerare l'utilizzo del suo successore pillow, che può essere scaricato tramite easy_install o pip.

su Ubuntu, suggerirei le seguenti:

  1. Se non si dispone ancora di pip, installarlo tramite apt-get: sudo apt-get install python-pip
  2. Installare cuscino: pip install pillow --user

Da lì, dovresti essere in grado di installare il cuscino e usarlo nella classe Image allo stesso modo.

+0

Cuscino non si comporta diversamente in questo caso. –

+0

@LennartRegebro, stai parlando per OP? Ho paura di non seguirmi. I problemi di visualizzazione delle immagini di vario genere vengono spesso risolti passando al cuscino. – blz

+0

Non è un'opinione, quindi non vedo come "parlare per" si applica qui. Questo non sarà risolto passando a Cuscino. –

9

Lo so, è una vecchia domanda ma ecco come l'ho risolto in Ubuntu, nel caso qualcuno abbia lo stesso problema e non voglia installare imagemagick (che comunque non risolve la causa principale del problema).

Il visualizzatore predefinito su Ubuntu può essere avviato utilizzando il comando "eog" nel terminale. Il cuscino, per impostazione predefinita, cerca solo i comandi "xv" e "display", quest'ultimo fornito da imagemagick. Pertanto, se installi imagemagick, la chiamata "display" aprirà effettivamente l'immagine. Ma perché non usare lo spettatore che abbiamo già?

Il codice Python per aprire il visualizzatore può essere trovato in lib/python3.4/site-packages/PIL/ImageShow.py (o l'equivalente della tua installazione Python). Scorrere verso il basso al di sotto della linea # 155 e trovare il blocco di codice dice:

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

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

copia che blocco e incollarlo proprio sotto, cambiando il "display" comando per comando di Ubuntu "eog":

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

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

Dopo aver salvato ImageShow.py, il cuscino dovrebbe mostrare correttamente() le immagini nel visualizzatore predefinito.

+1

Questo ha funzionato perfettamente! Quindi, perché è stato impostato su "display" in primo luogo? Avendo apportato questa modifica al file, qualcos'altro potrebbe non funzionare più tardi, poiché si aspettava "display" e non "eog"? –

+0

Eccellente. Personalmente penso che sia meglio della risposta accettata, preferisco anche "eog". Non credo che tu abbia mai trovato un modo che non implicasse la modifica del codice sorgente? [PIL image.show] (http://pillow.readthedocs.io/en/3.2.x/reference/Image.html#PIL.Image.Image.show) fa sembrare che dovrebbe essere un'opzione (ma non potrei non farlo funzionare). Inoltre, @Rafael_Espericueta - se dovessi indovinare, gli sviluppatori PIL probabilmente preferivano richiamare 'ImageMagick', dal momento che ha capacità di modifica, a differenza di' eog'. Dopotutto, _image.show() _ era "pensato principalmente per scopi di debug". –

4

Spero che quello che ho trovato here possa essere utile a qualcuno, ha funzionato per me. Essa spiega che quando il visualizzatore predefinito non accetta i file di immagine da riga di comando, è possibile utilizzare il modulo web browser per visualizzare l'immagine:

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 perché utilizza il nome del file come titolo per la finestra del visualizzatore a differenza di imagemagick che utilizza un nome di tipo gibberish. Vedere il nome del file era qualcosa di cui avevo bisogno .. Quindi anche se imagemagick ha funzionato per me, ho risolto un altro problema. –

2

Questa è una vecchia questione, tuttavia, mi ha ostacolato per un po '. Questa è la mia soluzione:

Corro Python 2.7 su Linux Mint e quando si chiama Image.show() non succede nulla. Sul mio sistema, il visualizzatore predefinito è "Image Viewer", che si chiama "eog" in bash. My Python pensa che io usi qualcos'altro forse "xv". Quindi, apri un terminale ed esegui

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

Cerca "xv" e sostituiscilo con "eog".

Salvare il file e Image.show() funziona correttamente (a scopo di debug).

1

Che cosa ha funzionato per me era:

brew install imagemagick