J'ai un problème étrange avec PIL qui ne redimensionne pas 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 erreur et me produit une image nommée mugshotv2.jpg
dans le dossier correct, mais il ne le redimensionne pas. Cela fait quelque chose, car la taille de l'image passe de 120 ko à 20 ko, mais les dimensions restent les mêmes.
Peut-être pouvez-vous également suggérer un moyen de recadrer des 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 redimensionné mon image à 150 px par sa largeur, laissant une hauteur de 100px.
resize()
renvoie une copie redimensionnée d'une image. Il ne modifie pas l'original. La bonne façon de l'utiliser est:
from PIL import Image
#...
img = img.resize((150, newheight), Image.ANTIALIAS)
Je pense que ce que vous recherchez est la fonction ImageOps.fit. De PIL docs :
ImageOps.fit (image, taille, méthode, fond perdu, centrage) => image
Renvoie une version redimensionnée et recadrée de l'image, recadrée au format et à la taille demandés. L'argument taille est la taille de sortie demandée en pixels, donnée sous la forme d'un tuple (largeur, hauteur).