Actuellement, j'utilise actuellement: Bien que cela fonctionne, je me retrouve avec des images de tailles différentes (certaines sont portrait et certaines sont des paysages), mais je veux que toutes les images aient une taille exacte. Peut-être une culture sensible? P> Mise à jour: strong> p> Ça ne me dérange pas de recadrer une petite partie de l'image. Quand j'ai dit culture raisonnable, je veux dire quelque chose comme cet algorythm: p>
3 Réponses :
Évidemment, vous auriez besoin de récolter ou de coussiner les images. Vous pouvez faire quelque chose comme ci-dessous pour obtenir une récolte centrée maximale selon le rapport d'aspect des vignettes (non testées):
Cet exemple a quelques insectes dedans. im.elcrop () ne se cultive pas en place. Il doit renvoyer l'objet image à lui-même. Les arguments apportés à la culture doivent être une boîte tuple, de sorte que vous devez envelopper ceux-ci (). Vous passez des flotteurs à la récolte. Besoin de faire int (largeur) et int (hauteur). En outre, tout cela n'est pas nécessaire car il existe une méthode intégrée: im = imageops.fit (im, taille, image.antialias, (0,5, 0,5)) code> qui fait la même chose.
Voici mon objectif de faire un ajustement rembourré pour une image: Il utilise d'abord l'opération de vignette pour apporter l'image dans vos limites d'origine et préserver l'aspect. Ensuite, il la cultive pour remplir la taille de vos limites (comme à moins que l'image d'origine n'ait été carrée, elle sera plus petite maintenant) et nous trouvons le décalage approprié pour centrer l'image. L'image est décalée au centre, de sorte que vous vous retrouvez avec un rembourrage noir, mais pas de culture d'image. P> Sauf si vous pouvez faire une devinière vraiment sensible à une culture centrale appropriée sans perdre de puissantes données d'image importantes sur les bords, une approche d'ajustement rembourrée fonctionnera mieux. P> Mise à jour p> Voici une version pouvant faire une culture centrale ou une coupe-pad. P> #!/usr/bin/env python
from PIL import Image, ImageChops, ImageOps
def makeThumb(f_in, f_out, size=(80,80), pad=False):
image = Image.open(f_in)
image.thumbnail(size, Image.ANTIALIAS)
image_size = image.size
if pad:
thumb = image.crop( (0, 0, size[0], size[1]) )
offset_x = max( (size[0] - image_size[0]) / 2, 0 )
offset_y = max( (size[1] - image_size[1]) / 2, 0 )
thumb = ImageChops.offset(thumb, offset_x, offset_y)
else:
thumb = ImageOps.fit(image, size, Image.ANTIALIAS, (0.5, 0.5))
thumb.save(f_out)
source = "/path/to/source/image.JPG"
makeThumb(source, "/path/to/source/image_padded.JPG", pad=True)
makeThumb(source, "/path/to/source/image_centerCropped.JPG", pad=False)
C'est vraiment proche de ce dont j'ai besoin @jdi, merci! Comment puis-je modifier pour couper et ne pas insérer le rembourrage? (même perdre un morceau de l'image)
Parfait, exactement ce dont j'avais besoin! Merci @jdi!
Si vous utilisez des vignettes faciles, vous devez définir ex: fait image_2 FITS dans image_1 Dimensions: p> culture code> sur
true code> et
haut de gamme code> à
vrai code> Pour toujours remplir l'espace (avoir exactement les mêmes dimensions).
thumbnailer = get_thumbnailer(image_2)
thumbnail = thumbnailer.generate_thumbnail(thumbnail_options={
'crop': True,
'upscale': True,
'size': image_1.size
})
image_2 = thumbnail.image
Envisagez de lire les manuels. La méthode
thumnail > est signifiait i> pour préserver l'aspect de l'image. Évidemment, vous ne pouvez pas avoir les deux, car toutes les images n'ont pas le même rapport d'aspect. Pensez à utiliser
redimensionner code> si vous souhaitez réparer sans préserver le rapport.
Il pouvait en faire la même taille s'il voulait faire un ajustement, ce qui couvrait la zone supplémentaire avec une couleur constante. Cela permettrait à une image 4x3 ou 16x9 ou toute image d'aspect d'une dimension donnée de 80x80
Malheureusement, il n'y a pas de moyen standard de définir "sensible" pour le recadrage. On dirait que vous voulez toujours récolter un carré de l'image, ce qui signifie que vous risquez de couper des pièces que vous vouliez vraiment conserver.
@MarkRansom - Je suis d'accord. Si votre image source a lieu un aspect très non carré, vous risquez de perdre une grande partie de l'image. Je pense qu'un rembourrage en forme sera mieux. Voir ma réponse.
Merci pour les réponses les gars, mais je préfère couper les images et perdre une partie d'entre eux au lieu d'ajouter du rembourrage. Voir ma mise à jour ci-dessus.