¿Por qué es tan mala la calidad de las imágenes JPEG producidas por PIL?

Las imágenes JPEG creadas con PIL (1.1.7) tienen una calidad muy baja. Aquí hay un ejemplo:

Entrada: http://sofes.miximages.com/python/cover_1.jpg

Salida: http://sofes.miximages.com/python/cover_2.jpg

La imagen de salida fue creada con el siguiente código:

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

El texto rojo se ve realmente horrible. Guardar la imagen con GIMP o Photoshop ni siquiera se acerca a la mala calidad creada por PIL. ¿Alguien sabe por qué sucede esto y cómo puede resolverse?

Hay dos partes para la calidad JPEG. El primero es el ajuste de quality que ya ha establecido en el valor más alto posible.

JPEG también utiliza el submuestreo de croma , asumiendo que los cambios de matiz de color son menos importantes que los cambios de luminosidad y que cierta información se puede desechar de forma segura. Desafortunadamente, en las aplicaciones exigentes, esto no siempre es cierto, y puede notarlo más fácilmente en los bordes rojos. PIL no expone una configuración documentada para controlar este aspecto.

Editado por Pascal Beyeler:

Acabo de encontrar una opción que deshabilita el submuestreo. Puede configurar el subsampling=0 al guardar una imagen y la imagen se ve mucho más nítida. Gracias por tu ayuda Mark!

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