Skip to content

Ritagliare una parte dell’immagine con Python, Pillow (trimming)

Python

La libreria di elaborazione delle immagini Pillow (PIL) di Python fornisce Image.crop() per ritagliare un’area parziale di un’immagine.

In questo articolo vengono descritti i seguenti contenuti con codice di esempio.

  • Raccolto normale
  • Specificare l’area esterna
  • Ritaglia il centro dell’immagine
  • Ritaglia il quadrato più grande dal rettangolo

Si prega di consultare il seguente articolo per l’installazione e l’utilizzo di base di Pillow (PIL).

Usa resize() per ridimensionare l’intera immagine invece di ritagliarne una parte e usa putalpha() per creare un’immagine trasparente ritagliando una forma diversa da un rettangolo (come un cerchio).

Usa lo slicing per ritagliare l’immagine rappresentata dall’array NumPy ndarray.

Importa immagine da PIL e apri l’immagine di destinazione.

from PIL import Image

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

immagine originale - astronauta

Raccolto normale

Imposta l’area di ritaglio con box=(sinistra, in contralto, a destra, in basso).

Le coordinate a sinistra contralto a (x, y) = (a destra, in contralto) e le coordinate in basso a destra contralto a (x, y) = (a destra, in basso). L’area da ritagliare è rimasta

Fai attenzione a non dimenticare che la casella richiede ().

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

Se vuoi solo salvare l’immagine ritagliata senza usarla per altre operazioni, puoi scrivere in una riga.

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

Cuscino Image.crop normale

Specificare l’area esterna

Anche se l’esterno dell’immagine è impostato nell’area di ritaglio, non viene generato un errore e l’immagine viene l in nero.

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

Cuscino Immagine.area coltivata esterna

Ritaglia il centro dell’immagine

Se si ritaglia desiderare il centro dell’immagine a qualsiasi dimensione, è conveniente definire la seguente funzione.

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))

Esempio di utilizzo:

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

Cuscino Image.crop center

Ritaglia il quadrato più grande dal rettangolo

Quando si crea un’immagine in miniatura, potrebbe essere necessario ritagliare un quadrato il più grande possibile dall’immagine rettangolare.

Definire una funzione che ritaglia un quadrato di lato corto dal centro dell’immagine rettangolare.

Usa l’attributo size per ottenere l’altezza e la larghezza dell’immagine e min() per quella più corta. Viene utilizzata la funzione crop_center() definita sopra.

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

Esempio di utilizzo:

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

Cuscino Image.crop quadrato più grande

Vedere il seguente articolo per ulteriori informazioni sulla generazione di immagini in miniatura con Pillow.