Libreria di immagini per Python 3


154

Cosa sta usando python-3 al posto di PIL per manipolare le immagini?


Hai controllato il modulo multimediale? (import media)
inspectorG4dget

@ inspectorG4dget: i media non sono nella libreria standard di python3
banx

Non pensavo nemmeno che PIL fosse standard. Ma sembra che mi sbagli
inspector

2
@ inspectorG4dget: No, hai ragione, PIL non è nella libreria standard.
Janus Troelsen,

Si dovrebbe installare Pillowda PyPI che dovrebbe essere un sostituto drop-in PIL; questo è il pacchetto preferito anche su Python 2.
Antti Haapala,

Risposte:



19

Christoph Gohlke è riuscito a creare PIL (solo per Windows) per le versioni Python fino alla 3.3: http://www.lfd.uci.edu/~gohlke/pythonlibs/

Ho provato la sua versione di PIL con Python 3.2 e l'immagine aperta / crea / manipolazione pixel / salva tutto il lavoro.


14

Qt funziona molto bene con la grafica. Secondo me è più versatile di PIL.

Ottieni tutte le funzionalità che desideri per la manipolazione della grafica, ma c'è anche la grafica vettoriale e persino il supporto per le stampanti reali. E tutto questo in una sola API uniforme QPainter.

Per usare Qt è necessario un bind Python: PySide o PyQt4 .
Entrambi supportano Python 3.

Ecco un semplice esempio che carica un'immagine JPG, disegna un cerchio con antialiasing del raggio 10 a coordinate (20, 20) con il colore del pixel che era a quelle coordinate e salva l'immagine modificata come file PNG:

from PySide.QtCore import *
from PySide.QtGui import *

app = QCoreApplication([])

img = QImage('input.jpg')

g = QPainter(img)
g.setRenderHint(QPainter.Antialiasing)
g.setBrush(QColor(img.pixel(20, 20)))
g.drawEllipse(QPoint(20, 20), 10, 10)
g.end()

img.save('output.png')

Ma tieni presente che questa soluzione è piuttosto "pesante", poiché Qt è un framework di grandi dimensioni per la creazione di applicazioni GUI.


7

Al 30 marzo 2012, ho provato e non sono riuscito a ottenere il fork di sloonz su GitHub per aprire le immagini. L'ho compilato per bene, ma in realtà non ha funzionato. Ho anche provato a costruire la libreria di gohlke, che è stata compilata ma non è riuscita ad aprire alcuna immagine. Qualcuno ha menzionato PythonMagick sopra, ma si compila solo su Windows. Vedi PythonMagick sul wiki di wxPython .

PIL è stato aggiornato l'ultima volta nel 2009, e mentre il suo sito web dice che stanno lavorando su una porta Python 3, sono passati 3 anni e la mailing list è diventata fredda.

Per risolvere il mio problema di manipolazione delle immagini in Python 3, sto usando subprocess.call()per eseguire i comandi della shell di ImageMagick. Questo metodo funziona.

Vedere la documentazione del modulo di sottoprocesso .



6

Vuoi la libreria Pillow , ecco come installarla su Python 3:

pip3 install Pillow

Se questo non funziona per te (dovrebbe), prova normale pip:

pip install Pillow

3

A seconda di ciò che è necessario, l' immagine di scikit può essere la scelta migliore, con manipolazioni che vanno ben oltre il PIL e l'attuale versione di Pillow. Molto ben curato, almeno quanto il cuscino. Inoltre, le strutture di dati sottostanti provengono da Numpy e Scipy, il che rende il suo codice incredibilmente interoperabile. Esempi che il cuscino non può gestire:

Unione del grafico di adiacenza della regione

Trasformazione del radon

Istogramma dei gradienti orientati

Poligoni approssimativi e suddivisi

Puoi vedere il suo potere nella galleria . Questo documento fornisce un'ottima introduzione. In bocca al lupo!


0

Se sei su Python3 puoi anche usare la libreria PILasOPENCV che funziona in Python 2 e 3. Le chiamate API api sono le stesse di PIL o pillow ma internamente funziona con OpenCV e numpy per caricare, salvare e manipolare immagini. Dai un'occhiata a https://github.com/bunkahle/PILasOPENCV o installalo con pip install PILasOPENCV. Non tutte le funzioni PIL sono state simulate ma le funzioni più comuni funzionano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.