2013-10-10 15 views
9

Le immagini JPEG create con PIL (1.1.7) hanno una qualità molto scarsa. Ecco un esempio:Perché la qualità delle immagini JPEG prodotte da PIL è così scarsa?

ingresso: http://s23.postimg.org/8bks3x5p7/cover_1.jpg

uscita: http://s23.postimg.org/68ey9zva3/cover_2.jpg

L'immagine di output è stato creato con il seguente codice:

from PIL import Image 
im = Image.open('/path/to/cover_1.jpg') 
im.save('/path/to/cover_2.jpg', format='JPEG', quality=100) 

Il testo rosso sembra davvero terribile. Salvare l'immagine con GIMP o Photoshop non si avvicina nemmeno alla cattiva qualità creata da PIL. Qualcuno sa perché questo succede e come può essere risolto?

Grazie per il vostro aiuto!

+1

Stai salvando un JPEG di un JPEG. Stai perdendo informazioni due volte. Sei sicuro che GIMP e Photoshop stiano effettivamente processando di nuovo il JPEG e non solo salvandolo così com'è (perché i programmi lo riconoscono come JPEG e, quindi, non fanno nulla)? – John

+0

Grazie per la tua risposta veloce. Sono consapevole del fatto che sto perdendo informazioni due volte. È solo un esempio molto semplice. Anche in produzione sto ridimensionando l'immagine :). Inoltre, se ridimensiono l'immagine in GIMP o Photoshop, l'immagine risultante sembra molto più nitida. Le due persone sembrano quasi le stesse nelle due immagini, ma il testo rosso sembra davvero diverso. – Pascal

+0

Non dubito che sia più nitido da GIMP/Photoshop. Ma è * diverso * dall'immagine di input? Dopo averlo salvato come JPEG da GIMP/Photoshop, qualcosa è cambiato? Se la risposta è no, allora PIL potrebbe sembrare "cattivo" perché in realtà sta applicando la compressione JPEG, mentre l'altro no. Vedi cosa sto ottenendo? – John

risposta

23

Ci sono due parti per la qualità JPEG. La prima è l'impostazione quality che hai già impostato sul valore più alto possibile.

JPEG utilizza anche chroma subsampling, presupponendo che le variazioni di tonalità del colore siano meno importanti delle modifiche di luminosità e alcune informazioni possono essere tranquillamente eliminate. Sfortunatamente in applicazioni esigenti questo non è sempre vero, e puoi facilmente notarlo sui bordi rossi. PIL non espone un'impostazione documentata per controllare questo aspetto.

Edit da Pascal Beyeler:

Ho appena trovato un'opzione che disabilita subsampling. È possibile impostare il sottocampionamento = 0 quando si salva un'immagine e l'immagine appare più nitida! Grazie per il tuo aiuto Marco!

im.save('/path/to/cover-2.jpg', format='JPEG', subsampling=0, quality=100) 
Problemi correlati