Image de PIL.redimensionner () ne pas redimensionner l'image

J'ai un problème étrange avec PIL ne pas redimensionner l'image.

from PIL import Image
img = Image.open('foo.jpg')

width, height = img.size
ratio = floor(height / width)
newheight = ratio * 150

img.resize((150, newheight), Image.ANTIALIAS)

img.save('mugshotv2.jpg', format='JPEG')

CE code s'exécute sans aucune erreur et ME produit une image nommée mugshotv2.jpg dans le bon dossier, mais il ne le redimensionne pas. Il y fait quelque chose, car la taille de l'image passe de 120 Ko à 20 Ko, mais les dimensions restent les mêmes.

Peut-être que vous pouvez également suggérer un moyen de recadrer les images en carrés avec moins de code. Je pensais un peu que Image.thumbnail le fait, mais ce qu'il a fait, c'est qu'il a mis à l'échelle mon image à 150 px par sa largeur, laissant la hauteur 100px.

26
demandé sur Aran-Fey 2009-08-10 00:36:35

1 réponses

resize() retourne une copie redimensionnée d'une image. Il ne modifie pas l'original. La bonne façon de l'utiliser est:

img = img.resize((150, newheight), image.ANTIALIAS)

Source

Je pense que ce que vous cherchez est L'ImageOps.ajustement de la fonction. De PIL docs:

ImageOps.fit (image, Taille, méthode, saignement, centrage) = > image

Renvoie une version taillée et recadrée de l'image recadrée à la demande rapport d'aspect et taille. Taille l'argument est la taille de sortie demandée dans pixels, donnés en tant que (Largeur, Hauteur) tuple.

74
répondu Nadia Alramli 2013-08-11 17:16:03