Comment recadrer une image en utilisant PIL?

134

Je veux recadrer l'image en supprimant les 30 premières lignes et les 30 dernières lignes de l'image donnée. J'ai cherché mais je n'ai pas trouvé la solution exacte. Quelqu'un a-t-il des suggestions?

Taj Koyal
la source

Réponses:

196

Il existe une crop()méthode:

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)
ninjagecko
la source
1
Oui, je sais que im.crop (box) est utilisé pour recadrer l'image. Mais je veux recadrer uniquement la partie supérieure et inférieure de l'image, pas à gauche et à droite, bien que box () prenne 4 tuple mais je ne sais pas comment recadrer la partie supérieure et inférieure de l'image.
Taj Koyal
4
@TajKoyal: Exactement ce que ninjagecko vous montre, c'est comment vous recadrez le haut et le bas. Il spécifie un rectangle pour la nouvelle image. Vous pouvez voir qu'il rase 30 pixels de la valeur y sur les points haut et bas. Si vous décalez les valeurs x de quelque manière que ce soit, cela affecterait les côtés gauche et droit.
jdi
1
Merci les gars de m'avoir aidé.
Taj Koyal
7
Pour quelqu'un d'aussi paresseux que moiParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav
53

Vous devez importer PIL (Pillow) pour cela. Supposons que vous ayez une image de taille 1200, 1600. Nous allons recadrer l'image de 400, 400 à 800, 800

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

(gauche, haut, droite, bas) signifie deux points,

  1. (gauche, supérieur)
  2. (droite, en bas)

avec une image de 800x600 pixels, le point supérieur gauche de l'image est (0, 0), le point inférieur droit est (800, 600).

Donc, pour couper la moitié de l'image:

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

entrez la description de l'image ici

Système de coordonnées

La bibliothèque d'imagerie Python utilise un système de coordonnées de pixels cartésien, avec (0,0) dans le coin supérieur gauche. Notez que les coordonnées font référence aux coins de pixels implicites; le centre d'un pixel adressé comme (0, 0) se trouve en fait à (0,5, 0,5).

Les coordonnées sont généralement transmises à la bibliothèque sous forme de 2 tuples (x, y). Les rectangles sont représentés sous forme de 4 tuples, le coin supérieur gauche étant donné en premier. Par exemple, un rectangle couvrant la totalité d'une image de 800 x 600 pixels s'écrit (0, 0, 800, 600).

l mingzhi
la source
13

Un moyen plus simple de le faire est d'utiliser le recadrage d' ImageOps . Vous pouvez alimenter le nombre de pixels que vous souhaitez recadrer de chaque côté.

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
PouyaB
la source