Como cortar uma imagem usando PIL?


134

Quero cortar a imagem removendo as primeiras 30 linhas e as últimas 30 da imagem fornecida. Eu procurei, mas não obtive a solução exata. Alguém tem algumas sugestões?

Respostas:


196

Existe um crop()método:

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

1
Sim, eu sei que o im.crop (caixa) é usado para cortar a imagem. Mas eu quero cortar apenas a parte superior e inferior da imagem, não a esquerda e a direita, embora box () use 4 tuplas, mas não estou aprendendo como cortar a parte superior e inferior da imagem.
taj Koyal

4
@TajKoyal: Exatamente o que o ninjagecko está mostrando é como você recorta as partes superior e inferior. Ele está especificando um retângulo para a nova imagem. Você pode ver que ele retira 30 pixels do valor y nos pontos superior e inferior. Se você compensar os valores de x de alguma forma, isso afetaria os lados esquerdo e direito.
JDI

1
Obrigado pessoal por me ajudar.
precisa saber é o seguinte

7
Para alguém tão preguiçoso como meParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav

52

Você precisa importar PIL (Pillow) para isso. Suponha que você tenha uma imagem do tamanho 1200, 1600. Cortaremos a imagem de 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

(esquerda, superior, direita, inferior) significa dois pontos,

  1. (esquerda, superior)
  2. (direita, mais baixo)

com uma imagem de 800x600 pixels, o ponto superior esquerdo da imagem é (0, 0) e o ponto inferior direito é (800, 600).

Então, para cortar a imagem pela metade:

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

insira a descrição da imagem aqui

Sistema de coordenadas

A Python Imaging Library usa um sistema de coordenadas cartesianas de pixels, com (0,0) no canto superior esquerdo. Observe que as coordenadas se referem aos cantos implícitos do pixel; o centro de um pixel endereçado como (0, 0) fica em (0,5, 0,5).

As coordenadas são geralmente passadas para a biblioteca como duas tuplas (x, y). Os retângulos são representados como quatro tuplas, com o canto superior esquerdo fornecido primeiro. Por exemplo, um retângulo que cobre toda uma imagem de 800x600 pixels é gravado como (0, 0, 800, 600).


13

Uma maneira mais fácil de fazer isso é usar o recorte do ImageOps . Você pode alimentar o número de pixels que deseja cortar de cada lado.

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.