2009-09-06 11 views
8

sto ottenendo circa lo stesso male guardare ridimensionamento da tutti i 4 algoritmi del PILPIL: ridimensionamento Image: algoritmo simile a Firefox di

>>> data = utils.fetch("http://wavestock.com/images/beta-icon.gif") 
>>> image = Image.open(StringIO.StringIO(data)); image.save("/home/ptarjan/www/tmp/metaward/original.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.ANTIALIAS); image.save("/home/ptarjan/www/tmp/metaward/antialias-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BILINEAR); image.save("/home/ptarjan/www/tmp/metaward/bilinear-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BICUBIC); image.save("/home/ptarjan/www/tmp/metaward/bicubic-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.NEAREST); image.save("/home/ptarjan/www/tmp/metaward/nearest-thumb.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest-rgb.png") 

Ma i risultati sembrano molto peggio che appena il ridimensionamento in Firefox.

http://paulisageek.com/tmp/metaward/images.html

Come posso ottenere un effetto simile al risultato firefox utilizzando PIL (o un'altra libreria di immagini python)?

EDIT: Passare il mouse per vedere ciò che ogni immagine è

http://paulisageek.com/tmp/metaward/original.png http://paulisageek.com/tmp/metaward/antialias.png http://paulisageek.com/tmp/metaward/bicubic.png http://paulisageek.com/tmp/metaward/bilinear.png http://paulisageek.com/tmp/metaward/nearest.png http://paulisageek.com/tmp/metaward/antialias-thumb.png http://paulisageek.com/tmp/metaward/bicubic-thumb.png http://paulisageek.com/tmp/metaward/bilinear-thumb.png http://paulisageek.com/tmp/metaward/nearest-thumb.png http://paulisageek.com/tmp/metaward/antialias-rgb.png http://paulisageek.com/tmp/metaward/bicubic-rgb.png http://paulisageek.com/tmp/metaward/nearest-rgb.png

Sembra che l'RGB e quindi ANTIALIS sia il migliore. Qualche altra raccomandazione?

Per avere un riferimento, questo è quello che sembrava il migliore:

>>> image = Image.open(StringIO.StringIO(data)); 
>>> image.convert("RGB").resize((36,36), Image.ANTIALIAS) 
+0

Quale versione di PIL stai usando? –

+0

Versione PIL: /usr/lib/python2.5/site-packages/PIL/PIL-1.1.6.egg-info –

+0

Gimp produce lo stesso risultato come PIL. –

risposta

8

Ho ridimensionato "l'originale" con Python e ho trovato gli stessi risultati di te. Ho anche ridimensionato l'originale con GIMP e ho ottenuto la stessa (se non inferiore) qualità. Questo mi ha fatto sospettare che i cheat di Firefox. Probabilmente si converte in RGB (la modalità "originale" è a colori indicizzati). Quindi il seguente codice:

import Image 
im=Image.open("beta-icon.gif") 
im = im.convert("RGB") 
im=im.resize((36,36), Image.ANTIALIAS) 
im.save("q5.png") 

Il risultato è quasi buono come quello di Firefox.

+0

Questa sarebbe una strategia generica per ottenere miniature buone? Se vuoi un esempio del mio corpus, ho circa 10k immagini: http://metaward.com/awards –

+2

Definitivamente. Il ridimensionamento delle immagini con colori indicizzati di solito non fornisce buoni risultati. Se non ti interessa preservare la tavolozza, devi sempre spostarti su RGB, quindi ridimensionare e (nel caso) ridurre nuovamente la profondità del colore. –

+0

Grazie Roberto. Perché il PIL non dovrebbe farlo automaticamente se è un metodo noto? –

0

Prova ad usare il metodo resize() invece di thumbnail(). Nella mia esperienza, si comportano in modo molto diverso.

Inoltre, il codice mostra la lettura di un file .gif, ma l'originale è .png. Assicurati di avere tutti i dati originali prima di iniziare a ridurli.

+0

Mi dispiace, ho tagliato la linea in cui l'ho reso originale. Ma sì, era solo una conversione. Proverò a ridimensionare e confrontare. –

+0

La pagina di esempio ora è tutta ridimensionata(), e hanno ancora un aspetto molto peggiore del modo FF. Qualche altro suggerimento? –

1

Sembra RGB e quindi ANTIALIS sembra il migliore. Qualche altra raccomandazione?

No, questo è davvero il risultato previsto. È possibile che qualsiasi ridimensionamento eseguito nella modalità tavolozza limitata originale produca spazzatura trascurata a causa della mancanza di colori intermedi disponibili nella palette; e ANTIALIAS è lo solo filtro di ridimensionamento che deve essere utilizzato per il downscaling: BILINEAR e BICUBIC prendono davvero solo due pixel per asse e si fondono tra di loro, il che va bene per l'upscaling ma non funziona affatto quando uno o entrambi gli assi sono downscalati.

Purtroppo la miniatura() non ha mai funzionato correttamente, quindi devi farlo tu stesso.

+0

quindi mi piacerebbe avere .thumbnail essere rimosso e sostituito con .thumbnail (dimensione) che converte la tavolozza, se necessario, e quindi utilizza ridimensiona. Come newcommer del PIL, .thumbnail sembrava esattamente quello di cui avevo bisogno. –

+0

In effetti, è uno degli angoli meno chiari del PIL che potrebbe essere migliorato, ma anche una trappola attraente per il nuovo utente. – bobince

+0

In realtà, con l'RGB ho perso il canale alfa. Un modo per tenerlo? –

Problemi correlati