Python / oreiller: comment dimensionner une image
supposons que j'ai une image qui est 2322px x 4128px. Comment faire pour que la largeur et la hauteur soient inférieures à 1028px?
Je ne pourrai pas utiliser Image.resize
( https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.resize ) puisque cela me demande de donner à la fois la nouvelle largeur et la nouvelle hauteur. Ce que j'ai l'intention de faire est (pseudo code ci-dessous):
if (image.width or image.height) > 1028:
if image.width > image.height:
tn_image = image.scale(make width of image 1028)
# since the height is less than the width and I am scaling the image
# and making the width less than 1028px, the height will surely be
# less than 1028px
else: #image's height is greater than it's width
tn_image = image.scale(make height of image 1028)
je suppose que je besoin d'utiliser Image.thumbnail
, mais selon cet exemple ( http://pillow.readthedocs.org/en/latest/reference/Image.html#create-thumbnails ) et cette réponse ( comment redimensionner une image en utilisant PIL et maintenir son format? ), la largeur et la hauteur sont fournies pour créer la vignette. Y a-t-il une fonction qui prend la nouvelle largeur ou la nouvelle hauteur (pas les deux) et qui met à l'échelle l'image entière?
2 réponses
pas besoin de réinventer la roue, il y a la méthode Image.thumbnail
disponible pour cela:
maxsize = (1028, 1028)
tn_image = image.thumbnail(maxsize, PIL.Image.ANTIALIAS)
assure que la taille résultante n'est pas plus grande que les limites données tout en maintenant le rapport d'aspect.
spécifiant PIL.Image.ANTIALIAS
applique un filtre downsampling de haute qualité pour un meilleur résultat de redimensionnement, vous voulez probablement que trop.
Utiliser L'Image.redimensionner, mais calculer à la fois la largeur et la hauteur.
if image.width > 1028 or image.height > 1028:
if image.height > image.width:
factor = 1028 / image.height
else:
factor = 1028 / image.width
tn_image = image.resize((int(image.width * factor), int(image.height * factor)))