Come ritagliare un'immagine usando PIL?


134

Voglio ritagliare l'immagine nel modo rimuovendo le prime 30 righe e le ultime 30 righe dall'immagine data. Ho cercato ma non ho ottenuto la soluzione esatta. Qualcuno ha qualche suggerimento?

Risposte:


196

C'è un crop()metodo:

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)

1
Sì, so che im.crop (box) viene utilizzato per ritagliare l'immagine. Ma voglio ritagliare solo la parte superiore e inferiore dell'immagine non sinistra e destra, anche se box () prende 4 tuple ma non riesco a ritagliare la parte superiore e inferiore dell'immagine.
Taj Koyal,

4
@TajKoyal: esattamente ciò che ninjagecko ti sta mostrando è come ritagliare dall'alto e dal basso. Sta specificando un rettangolo per la nuova immagine. Puoi vedere che si rade di 30 pixel dal valore y sui punti superiore e inferiore. Se si compensano i valori di x in qualche modo, Quello influenzerebbe i lati sinistro e destro.
jdi,

1
Grazie ragazzi per avermi aiutato.
Taj Koyal

7
Per qualcuno pigro come meParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav

53

È necessario importare PIL (cuscino) per questo. Supponiamo di avere un'immagine di dimensioni 1200, 1600. Ritaglieremo l'immagine da 400, 400 a 800, 800

from PIL import Image
img = Image.open("ImageName.jpg")
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.show()

20

(a sinistra, in alto, a destra, in basso) significa due punti,

  1. (a sinistra, in alto)
  2. (a destra, in basso)

con un'immagine di 800x600 pixel, il punto superiore sinistro dell'immagine è (0, 0), il punto inferiore destro è (800, 600).

Quindi, per tagliare la metà dell'immagine:

from PIL import Image
img = Image.open("ImageName.jpg")

img_left_area = (0, 0, 400, 600)
img_right_area = (400, 0, 800, 600)

img_left = img.crop(img_left_area)
img_right = img.crop(img_right_area)

img_left.show()
img_right.show()

inserisci qui la descrizione dell'immagine

Sistema di coordinate

La libreria di imaging Python utilizza un sistema di coordinate pixel cartesiane, con (0,0) nell'angolo in alto a sinistra. Si noti che le coordinate si riferiscono agli angoli di pixel impliciti; il centro di un pixel indirizzato come (0, 0) si trova effettivamente su (0,5, 0,5).

Le coordinate vengono generalmente passate alla libreria come 2-tuple (x, y). I rettangoli sono rappresentati come 4 tuple, con l'angolo in alto a sinistra indicato per primo. Ad esempio, un rettangolo che copre l'intera immagine di 800x600 pixel è scritto come (0, 0, 800, 600).


13

Un modo più semplice per farlo è usare il ritaglio da ImageOps . È possibile alimentare il numero di pixel che si desidera ritagliare da ciascun lato.

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.