2009-09-06 13 views
8

Me estoy poniendo sobre la misma mal aspecto cambiar el tamaño de todos los 4 algoritmos de PILPIL: cambio de tamaño de archivo: Algoritmo similar a Firefox de

>>> 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") 

Pero los resultados son mucho peores que acaba de cambiar el tamaño en Firefox.

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

¿Cómo puedo obtener un efecto similar al resultado Firefox usando PIL (u otra biblioteca de imágenes de Python)?

EDITAR: Pase el cursor del ratón para ver lo que cada imagen es

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/bilinear-rgb.png http://paulisageek.com/tmp/metaward/nearest-rgb.png

Parece que el RGB y luego ANTIALIS se ve mejor. ¿Alguna otra recomendación?

de referencia, esta es la que se veía el mejor:

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

¿Qué versión de PIL estás usando? –

+0

Versión de PIL: /usr/lib/python2.5/site-packages/PIL/PIL-1.1.6.egg-info –

+0

Gimp produce el mismo resultado que PIL. –

Respuesta

8

Cambié el tamaño del "original" con Python y encontré los mismos resultados que usted. También cambié el tamaño del "original" con GIMP y obtuve la misma calidad (si no inferior). Esto me hizo sospechar que Firefox hace trampa. Posiblemente se convierta a RGB (el modo "original" es el color indexado). Por lo tanto, el siguiente código:

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

El resultado es casi tan bueno como el de Firefox.

+0

¿Sería esta una estrategia de uso general para obtener buenas miniaturas? Si quiere un ejemplo de mi corpus, tengo alrededor de 10k imágenes: http://metaward.com/awards –

+2

Definitivamente. Cambiar el tamaño de las imágenes con colores indexados no suele ofrecer buenos resultados. Si no te importa preservar la paleta, entonces siempre debes moverte a RGB, luego redimensionar y (en caso de que) reducir nuevamente la profundidad de color. –

+0

Gracias Roberto. ¿Por qué no PIL haría eso por defecto entonces si es un método conocido? –

0

Trate de usar el método resize() en lugar de thumbnail(). En mi experiencia, se comportan de manera muy diferente.

Además, su código muestra la lectura de un .gif, pero su original es .png. Asegúrese de tener todos los datos originales antes de comenzar a reducirlos.

+0

Lo siento, corté la línea donde hice original. Pero sí, fue solo una conversión. Voy a intentar cambiar el tamaño, y comparar. –

+0

La página de ejemplo ahora es todo resize(), y todavía se ven mucho peor que el modo FF. ¿Cualquier otra sugerencia? –

1

Parece que el RGB y luego ANTIALIS se ve mejor. ¿Alguna otra recomendación?

No, de hecho es el resultado esperado. Cualquier cambio de tamaño realizado en el modo de paleta limitada original es probable que produzca basura irregular debido a la falta de colores intermedios disponibles en la paleta; y ANTIALIAS es el único filtro de tamaño de que está destinado a ser utilizado para la reducción de escala: BILINEAR y BICUBIC realmente solo toman dos píxeles por eje y se mezclan entre ellos, lo cual está bien para la ampliación pero no funciona cuando uno o ambos los ejes están rebajados.

Desafortunadamente, la miniatura nunca ha funcionado correctamente, por lo que debe hacerlo usted mismo.

+0

entonces me encantaría tener .thumbnail ser eliminado y reemplazado con .thumbnail (tamaño) que convierte la paleta si es necesario, y luego utiliza el tamaño. Como un recién llegado a PIL, parecía ser exactamente lo que necesitaba. –

+0

De hecho, es una de las esquinas dudosas de PIL que podría mejorarse, pero también una trampa atractiva para el nuevo usuario. – bobince

+0

En realidad, al hacerlo con el RGB perdí el canal alfa. ¿Alguna forma de mantener eso? –

Cuestiones relacionadas