184 votes

Comment recadrer une image à l'aide du LIP ?

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 fait des recherches mais je n'ai pas trouvé la solution exacte. Quelqu'un a-t-il des suggestions à faire ?

236voto

ninjagecko Points 25709

Hay un crop() méthode :

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

2 votes

Oui, je sais que im.crop(box) est utilisé pour recadrer l'image. Mais je veux recadrer seulement la partie supérieure et inférieure de l'image, pas la gauche et la droite, bien que box() prenne 4 tuple mais je ne comprends pas comment recadrer la partie supérieure et inférieure de l'image.

4 votes

@TajKoyal : Exactement ce que ninjagecko vous montre, c'est la façon dont vous coupez 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écaliez les valeurs x de quelque manière que ce soit, cela affecterait les côtés gauche et droit.

1 votes

Merci les gars de m'avoir aidé.

80voto

Atul Chavan Points 765

Pour cela, vous devez importer le LIP (Oreiller). 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()

69voto

l mingzhi Points 163

(gauche, supérieur, droit, inférieur) signifie deux points,

  1. (gauche, haut)
  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 l'image en deux :

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

enter image description here

Système de coordonnées

La bibliothèque d'imagerie Python utilise un système de coordonnées cartésiennes par pixel, avec (0,0) dans le coin supérieur gauche. Notez que les coordonnées font référence aux coins implicites du pixel ; 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 800x600 pixels s'écrit (0, 0, 800, 600).

31voto

PouyaB Points 139

Une façon plus simple de le faire est d'utiliser le crop à partir de 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, top, right, bottom
ImageOps.crop(img, border)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X