Skip to content

Recadrer une partie de l’image avec Python, Pillow (trimming)

La bibliothèque de traitement d’image Pillow (PIL) de Python fournit Image.crop() pour découper une zone partielle d’une image.

Cet article décrit le contenu suivant avec un exemple de code.

  • Culture normale
  • Spécifiez la zone extérieure
  • Recadrer le centre de l’image
  • Recadrer le plus grand carré du rectangle

Veuillez consulter l’article suivant pour l’installation et l’utilisation de base de Pillow (PIL).

Utilisez resize() pour redimensionner l’image entière au lieu de découper une partie de l’image, et utilisez putalpha() pour créer une image transparente en découpant une forme autre qu’un rectangle (comme un cercle).

Utilisez le découpage en tranches pour recadrer l’image représentée par le tableau NumPy ndarray.

Importer l’image à partir de PIL et ouvrir l’image cible.

from PIL import Image

im = Image.open('data/src/astronaut_rect.bmp')

image originale - astronaute

Culture normale

Définissez la zone de recadrage avec box=(gauche, haut, droite, bas).

Les coordonnées en haut à gauche correspondent à (x, y) = (gauche, supérieur) et les coordonnées en bas à droite correspondent à (x, y) = (droite, inférieur). La zone à recadrer est laissée

Attention à ne pas oublier que la case nécessite ().

im_crop = im.crop((60, 20, 400, 200))
im_crop.save('data/dst/astronaut_pillow_crop.jpg', quality=95)

Si vous souhaitez simplement enregistrer l’image recadrée sans l’utiliser pour d’autres opérations, vous pouvez écrire sur une seule ligne.

im.crop((60, 20, 400, 200)).save('data/dst/astronaut_pillow_crop.jpg', quality=95)

Oreiller Image.crop normal

Spécifiez la zone extérieure

Même si l’extérieur de l’image est défini dans la zone de recadrage, aucune erreur n’est générée et l’image s’affiche en noir.

im_crop_outside = im.crop((200, 150, 600, 360))
im_crop_outside.save('data/dst/astronaut_pillow_crop_outside.jpg', quality=95)

Oreiller Image.recadrer en dehors de la zone

Recadrer le centre de l’image

Si vous souhaitez recadrer le centre de l’image à n’importe quelle taille, il est pratique de définir la fonction suivante.

def crop_center(pil_img, crop_width, crop_height):
    img_width, img_height = pil_img.size
    return pil_img.crop(((img_width - crop_width) // 2,
                         (img_height - crop_height) // 2,
                         (img_width + crop_width) // 2,
                         (img_height + crop_height) // 2))

Exemple d’utilisation :

im_new = crop_center(im, 300, 150)
im_new.save('data/dst/astronaut_pillow_crop_center.jpg', quality=95)

Oreiller Image.crop center

Recadrer le plus grand carré du rectangle

Lors de la création d’une image miniature, vous devrez peut-être découper un carré aussi grand que possible à partir de l’image rectangulaire.

Définissez une fonction qui recadre un carré de petit côté à partir du centre de l’image rectangulaire.

Utilisez l’attribut size pour obtenir la hauteur et la largeur de l’image, et min() pour obtenir la plus courte. La fonction crop_center() définie ci-dessus est utilisée.

def crop_max_square(pil_img):
    return crop_center(pil_img, min(pil_img.size), min(pil_img.size))

Exemple d’utilisation :

im_new = crop_max_square(im)
im_new.save('data/dst/astronaut_pillow_crop_max_square.jpg', quality=95)

Oreiller Image.crop plus grand carré

Consultez l’article suivant pour plus d’informations sur la génération d’images miniatures avec Pillow.