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

134

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

Тадж Коял
источник

Ответы:

196

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

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)
ninjagecko
источник
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)
PouyaB
источник