Desenvolvimento

16 dez, 2011

Redimensionamento e corte automático de imagens com Pylons

Publicidade

Quando os usuários fazem upload de imagens para aplicativos web, elas imagens podem ter qualquer tamanho. Mas, depois, essas imagens podem ser exibidas em uma tela com espaço limitado, por exemplo em um smartphone. Portanto, uma imagem com tamanho definido pode ser necessária.

Vou mostrar como redimensionar e cortar imagens que já foram carregadas automaticamente em um Pylon back-end, usando o Python Imaging Library (PIL).

Primeiramente, definiremos a largura de nossas e imagens e calcularemos a proporção necessária:

from PIL import Image

MAXSIZEX = 50 # this is the maximum width of the images
MAXSIZEY = 75 # this is the maximum height of the images
ratio = 1. * MAXSIZEX / MAXSIZEY

Essas imagens não se encaixam na proporção definida para serem cortadas, porque não queremos deformá-las. Essas imagens devem ser cortadas no lado esquerdo ou no direito, ou em cima ou embaixo. O arquivo de entrada também pode ser um arquivo-como-objeto (por exemplo uma imagem em um POST-Request).

im = Image.open("imagefile.png") # open the input file
(width, height) = im.size # get the size of the input image

if width > height * ratio:
# crop the image on the left and right side
newwidth = int(height * ratio)
left = width / 2 - newwidth / 2
right = left + newwidth
# keep the height of the image
top = 0
bottom = height
elif width < height * ratio:
# crop the image on the top and bottom
newheight = int(width * ratio)
top = height / 2 - newheight / 2
bottom = top + newheight
# keep the width of the impage
left = 0
right = width
if width != height * ratio:
im = im.crop((left, top, right, bottom))

Agora a proporção da imagem está de acordo com a proporção definida. No final, a imagem precisa ser redimensionada para o tamanho definido. Estamos usando o filtro de amostragem ANTIALIAS para ter obter resultados com alta qualidade.

im = im.resize((MAXSIZEX, MAXSIZEY), Image.ANTIALIAS)
im.save(fout, "jpeg", quality = 100) # save the image
fout.close()

Essa imagem processada agora tem seu tamanho definido e não destruirá o layout de seu aplicativo.

Espero que isso ajude você.

?

Texto original disponível em http://blog.lagentz.com/python/automatic-image-resizing-and-cropping-with-pylons/