Як обрізати зображення за допомогою PIL?


134

Я хочу обрізати зображення способом, видаливши з даного зображення перші 30 рядків і останні 30 рядків. Я шукав, але не отримав точного рішення. Хтось має якісь пропозиції?

Відповіді:


196

Існує crop()метод:

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

1
Так, я знаю, що для обрізання зображення використовується im.crop (поле). Але я хочу обрізати лише верхню і нижню частину зображення не ліворуч та праворуч, хоча поле () займає 4 кортежі, але я не отримую, як обрізати верхню та нижню частину зображення.
Тадж Коял

4
@TajKoyal: Саме те, що показує вам ніндзягечко, - це те, як ви обрізаєте верх і низ. Він визначає прямокутник для нового зображення. Ви можете бачити, що він голить 30 пікселів від значення y у верхній та нижній точках. Якщо ви будь-яким чином компенсуєте значення x, ТО вплине на ліву та праву сторони.
jdi

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). Прямокутники представлені у вигляді 4-кортежів, причому верхній лівий кут приведений першим. Наприклад, прямокутник, що охоплює все зображення 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.