python png thumbnails python-imaging-library alpha

python - PIL: miniatura y termina con una imagen cuadrada



png thumbnails (4)

Vocación

image = Image.open(data) image.thumbnail((36,36), Image.NEAREST)

mantendrá la relación de aspecto. Pero necesito terminar mostrando la imagen así:

<img src="/media/image.png" style="height:36px; width:36px" />

¿Puedo tener un estilo de buzón con transparencia o blanco alrededor de la imagen?


O esto, tal vez ... (perdona los espaguetis)

from PIL import Image def process_image(image, size): if image.size[0] > size[0] or image.size[1] > size[1]: #preserve original thumb = image.copy() thumb.thumbnail(size,Image.ANTIALIAS) img = thumb.copy() img_padded = Image.new("RGBA",size) img_padded.paste(image,(int((size[0]-image.size[0])/2),int((size[1]-image.size[1])/2))) return img_padded


PIL ya tiene una función para hacer exactamente eso:

from PIL import Image, ImageOps thumb = ImageOps.fit(image, size, Image.ANTIALIAS)


Pegue la imagen en una imagen transparente con el tamaño correcto como fondo

from PIL import Image size = (36, 36) image = Image.open(data) image.thumbnail(size, Image.ANTIALIAS) background = Image.new(''RGBA'', size, (255, 255, 255, 0)) background.paste( image, (int((size[0] - image.size[0]) / 2), int((size[1] - image.size[1]) / 2)) ) background.save("output.png")

EDITAR: error de sintaxis fijo


from PIL import Image import StringIO def thumbnail_image(): image = Image.open("image.png") image.thumbnail((300, 200)) thumb_buffer = StringIO.StringIO() image.save(thumb_buffer, format=image.format) fp = open("thumbnail.png", "w") fp.write(thumb_buffer.getvalue()) fp.close()