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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top