Pregunta

Estoy trabajando en PIL y necesito saber si la calidad de la imagen se puede ajustar al cambiar el tamaño o la vista en miniatura de una imagen. Por lo que sé, la calidad predeterminada se establece en 85. ¿Se puede modificar este parámetro durante el cambio de tamaño?

Actualmente estoy usando el siguiente código:

image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)

El parámetro ANTIALIAS presumiblemente da la mejor calidad. Necesito saber si podemos obtener más detalles sobre la opción de calidad.

¿Fue útil?

Solución

Use el método resize de PIL manualmente:

image = image.resize((x, y), Image.ANTIALIAS)  # LANCZOS as of Pillow 2.7

Seguido por el método de guardar

quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)

Eche un vistazo a la fuente de < code> models.py de Photologue para ver cómo lo hacen.

Otros consejos

ANTIALIAS no es de ninguna manera comparable a la " 85 " nivel de calidad. El parámetro ANTIALIAS le dice al método en miniatura qué algoritmo usar para volver a muestrear los píxeles de un tamaño a otro. Por ejemplo, si tengo una imagen de 3x3 que se parece a esto:

2 2 2
2 0 2
2 2 2

y lo redimensiono a 2x2, un algoritmo podría darme:

2 2
2 2

porque la mayoría de los píxeles cercanos son 2s, mientras que otro podría darme:

1 1
1 1

para tener en cuenta el 0 en el medio. Pero aún no ha comenzado a lidiar con la compresión, y no lo hará hasta que guarde la imagen. Es decir, en miniatura, no se trata de graduaciones de calidad, sino de algoritmos discretos para el remuestreo. Así que no, no puedes tener un mejor control aquí.

Si guarda en un formato con compresión con pérdida, ese es el lugar para especificar niveles de calidad.

No confunda el cambio de escala y la compresión.

Para la mejor calidad tienes que usar ambos. Vea el siguiente código:

from PIL import Image

image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)

De esta manera tengo muy buenos pulgares en mis programas.

Antialias n establece una calidad como 90

   img = img.resize((128,128),Image.ANTIALIAS)
   img.save(os.path.join(output_dir+'/'+x,newfile),"JPEG",quality=90)

http://www.dzone.com/snippets/resize-thousands- imagenes-python

Una forma de lograr una mejor calidad es hacer el downscaling en dos pasos. Por ejemplo, si su imagen original es 1200x1200 y necesita cambiar su tamaño a 64x64 píxeles, entonces, en el primer paso, reduzca la escala a algún lugar en medio de estos dos tamaños:

1200x1200 - > 600 x 600 - > 64x64

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top