Как обрезать изображение с помощью PIL?

Я хочу обрезать изображение в пути, удалив первые 30 строк и последние 30 строк из данного изображения. Я искал, но не получил точного решения. Есть ли у кого-то предложения?

Ответ 1

Существует метод crop():

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

Ответ 2

Вам нужно импортировать PIL (Pillow) для этого. Предположим, что у вас есть изображение размером 1200, 1600. Мы обрезаем изображение с 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()

Ответ 3

Более простой способ сделать это - использовать кадрирование из ImageOps. Вы можете указать количество пикселей, которые вы хотите обрезать с каждой стороны.

from PIL import ImageOps

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

Ответ 4

(слева, сверху, справа, снизу) означает две точки,

  1. (слева вверху)
  2. (справа внизу)

с изображением 800x600 пикселей левая верхняя точка изображения (0, 0), правая нижняя точка (800, 600).

Итак, для обрезки изображения пополам:

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

Система координат

Библиотека изображений Python использует декартову систему координат пикселей с (0,0) в верхнем левом углу. Обратите внимание, что координаты относятся к подразумеваемым углам пикселей; центр пикселя с адресом (0, 0) фактически лежит в (0,5, 0,5).

Координаты обычно передаются в библиотеку в виде 2-х кортежей (x, y). Прямоangularьники представлены в виде 4-х кортежей, левый верхний angular указан первым. Например, прямоangularьник, покрывающий все изображение размером 800x600 пикселей, записывается как (0, 0, 800, 600).