2009-09-18 14 views
10

Ho un codice Python che deve fare solo un paio di cose semplici per le fotografie: ritagliare, ridimensionare e sovrapporre una filigrana. Ho usato PIL, e i risultati resample/ridimensionamento sono TERRIBILI. Ho usato imagemagick e l'interfaccia e i comandi sono stati progettati imballando un gatto in una scatola e poi ripetutamente gettandolo giù per una serie di scale su una tastiera.Alternative di imaging Python

Sto cercando qualcosa che non sia PIL o Imagemagick che posso usare con python per realizzare trasformazioni di immagine semplici e di alta qualità. Del resto, non ha nemmeno bisogno di avere collegamenti Python se l'interfaccia della riga di comando è buona.

Oh, e deve essere relativamente indipendente dalla piattaforma, i nostri server di produzione sono Linux, ma alcuni dei nostri sviluppatori si sviluppano su Windows. Non può richiedere l'installazione di una manciata di codice stupido da usare come libreria.

+1

Ti starà cercando un po '. PyMagick è l'unica cosa là fuori oltre al PIL. –

+3

In che modo le persone trovano PIL accettabile? Qualsiasi operazione di ridimensionamento (anche il downsampling) produce artefatti e sfocatura, anche con l'impostazione di ricampionamento ANTIALIAS. Ho cercato per ore di produrre risultati che avrei accettato, ma rispetto a strumenti desktop come Photoshop o GIMP, il ridimensionamento di PIL è patetico. –

+1

Io uso il ridimensionamento con antialias per generare, le miniature per un'app di generazione di documenti, e sono paragonabili a ciò che acrobat pdf viewer fa –

risposta

17

Ho usato PIL, e i risultati resample/ridimensionamento sono TERRIBILI.

Non dovrebbero essere, come a queste condizioni:

  1. Utilizzare solo Image.ANTIALIAS filtraggio per le operazioni di downscaling
  2. l'uso solo di filtraggio Image.BICUBIC per le operazioni di upscaling.
  3. Ricordare di convertire in modalità colore "RGB" prima del ridimensionamento se si utilizza un'immagine tavolozza
  4. non utilizzare .thumbnail(). fa schifo
  5. impostare il livello quality= a qualcosa di appropriato per il salvataggio file JPEG (il valore predefinito è piuttosto basso)
+0

Sapete, dopo ulteriori test, i risultati * sono * migliori con il ridimensionamento rispetto alla miniatura, anche con entrambi utilizzando l'algoritmo Image.ANTIALIAS. Se ci penso più tardi pubblicherò alcuni risultati di esempio di varie operazioni. –

+1

Vedere http://stackoverflow.com/questions/1386400/pil-image-resizing-algorithm-similar-to-firefoxs - non sembra abbastanza come contro ma c'è chiaramente qualcosa di sbagliato in ciò che thumbnail() è facendo. – bobince

+0

Volevo solo rafforzare il punto 5. È facile non vederlo, ed è la causa principale dei problemi a cui inizialmente si lamentava questa domanda. –

1

PIL può fare un buon ridimensionamento. Assicurati che l'immagine sorgente sia in modalità RGB, non i colori della tavolozza e prova le diverse scelte dell'algoritmo.

+0

L'ho sempre usato su semplici file JPEG. Image.open ('myfile.jpg'), quindi Image.thumbnail o Image.resize, seguito da Image.save ... Tutti con l'impostazione ANTIALIAS per il downsampling. Per impostazione predefinita, dovrebbe essere in modalità RGB (jpegs RGB) e con il miglior algoritmo per il downsampling, giusto? Se mi manca qualcosa mi piacerebbe sapere cosa ho sbagliato ... –

+0

Senza vedere il codice sorgente e le immagini di origine, è difficile dire cosa sta succedendo. Molte persone usano PIL per questo tipo di lavoro e sono felici dei risultati. C'è qualcosa di diverso nel tuo caso (hai specialmente occhi d'aquila?), Ma non abbiamo ancora capito cosa. –

1

Mentre imagemagick sembra essere la libreria di immagini di fatto open source, probabilmente DevIL (multipiattaforma, sembra eseguire semplici operazioni di immagine) o FreeImage.

1

Hai controllato pypi? Una ricerca rapida mostra alcuni strumenti relativi alle immagini, ho anche scoperto python-gd, nessun indizio su quanto possa essere utile.

Non ho mai avuto problemi con PIL, ma una specie di varietà potrebbe essere interessante.

1

GIMP ha un'interfaccia della riga di comando ragionevole, credo.

+0

Sfortunatamente GIMP richiede GTK +, che è una libreria abbastanza sciocca da installare su un server senza testa. –

1

Date un'occhiata ad alcune di queste librerie di imaging:

hxxp: //pypi.python.org/pypi/collective.croppingimagefield/0.1beta

hxxp: //pypi.python.org/ pypi/cropresize/0.1.1

hxxp: //pypi.python.org/pypi/image_resize/1.0

0

L'ultima volta che ho confrontato, l'uscita di questo downscaler è quasi identico a quello della discrezione di GIMP "cubico":

import Image 

def stretch(im, size, filter=Image.NEAREST): 
    im.load() 
    im = im._new(im.im.stretch(size, filter)) 
    return im 

IIRC, le differenze sono visivamente indistinguibili - Valori qualche pixel di +/- 1 a causa di arrotondamento, e tendono ad essere intorno ai bordi. Non è neanche lento.

cf: http://www.mail-archive.com/[email protected]/msg00248.html

2

io sono sicuro del perché Image.thumbnail è sempre tale antiproiettile. Nel presente comunicato che sto scappando, fa poco più che calcolare la dimensione desiderata e ridimensionare l'immagine sul posto. Finché utilizzi il filtro resample appropriato e converti prima in RGB (come dice bobince) la miniatura non dovrebbe essere diversa dal ridimensionamento.

Ecco la vera fonte per il metodo delle miniature:

def thumbnail(self, size, resample=NEAREST): 
    # preserve aspect ratio 
    x, y = self.size 
    if x > size[0]: y = max(y * size[0]/x, 1); x = size[0] 
    if y > size[1]: x = max(x * size[1]/y, 1); y = size[1] 
    size = x, y 

    if size == self.size: 
     return 

    self.draft(None, size) 

    self.load() 

    try: 
     im = self.resize(size, resample) 
    except ValueError: 
     if resample != ANTIALIAS: 
      raise 
     im = self.resize(size, NEAREST) # fallback 

    self.im = im.im 
    self.mode = im.mode 
    self.size = size 

    self.readonly = 0 
0

Ho usato PIL, e il ricampionamento/ridimensionare risultati sono terribili.

Il ridimensionamento in PIL è stato interrotto in molti modi e PIL non viene mantenuto per molto tempo. A partire da Pillow 2.7, la maggior parte dei problemi viene risolta con un notevole miglioramento delle prestazioni. Assicurati di utilizzare latest Pillow.

Problemi correlati