Qu'est-ce qu'un reformulations plus élégant de cet algorithme de culture? (Dans le python)
-
22-08-2019 - |
Question
Je veux recadrer une image miniature dans mon application Django, de sorte que je reçois une image quadratique qui montre le centre de l'image. Ce n'est pas très difficile, je suis d'accord.
Je l'ai déjà écrit un code qui fait exactement cela, mais en quelque sorte il manque une certaine ... l'élégance. Je ne veux pas jouer au golf de code, mais il doit y avoir un moyen d'exprimer cette plus courte et plus pythonique, je pense.
x = y = 200 # intended size
image = Image.open(filename)
width = image.size[0]
height = image.size[1]
if (width > height):
crop_box = ( ((width - height)/2), 0, ((width - height)/2)+height, height )
image = image.crop(crop_box)
elif (height > width):
crop_box = ( 0, ((height - width)/2), width, ((height - width)/2)+width )
image = image.crop(crop_box)
image.thumbnail([x, y], Image.ANTIALIAS)
Avez-vous des idées, SO?
modifier expliqué x, y
La solution
Je pense que cela devrait le faire.
size = min(image.Size)
originX = image.Size[0] / 2 - size / 2
originY = image.Size[1] / 2 - size / 2
cropBox = (originX, originY, originX + size, originY + size)
Autres conseils
La fonction fit()
dans le PIL ImageOps Module fait ce que vous veulent:
ImageOps.fit(image, (min(*image.size),) * 2, Image.ANTIALIAS, 0, (.5, .5))
width, height = image.size
if width > height:
crop_box = # something 1
else:
crop_box = # something 2
image = image.crop(crop_box)
image.thumbnail([x, x], Image.ANTIALIAS) # explicitly show "square" thumbnail
Je veux une analyse du contenu d'une image JEPG. Je souhaite prendre un jpeg imafe dire 251 x 261 et passer par un algorithme pour la recadrer à dire 96 x 87. Ce programme peut faire comme t écrire un algorithme de recadrage intelligent, avec une invite à Rezié l'image.