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


134

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

Ответы:


196

Есть crop()метод:

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

1
Да, я знаю, что im.crop (box) используется для обрезки изображения. Но я хочу обрезать только верхнюю и нижнюю часть изображения, а не левую и правую, хотя box () занимает 4 кортежа, но я не понимаю, как обрезать верхнюю и нижнюю часть изображения.
Taj Koyal

4
@TajKoyal: Именно то, что вам показывает ниндзягецко, это то, как вы обрезаете верх и низ. Он указывает прямоугольник для нового изображения. Вы можете видеть, что он сбривает 30 пикселей от значения y в верхней и нижней точках. Если вы сместите значения x любым способом, то это повлияет на левую и правую стороны.
2012 г.

1
Спасибо, ребята, что помогли мне.
Тадж Коял

7
Для Parameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
такого

53

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

20

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

  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). Прямоугольники представлены четырьмя кортежами, левый верхний угол указан первым. Например, прямоугольник, покрывающий все изображение размером 800x600 пикселей, записывается как (0, 0, 800, 600).


13

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

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.