Метод getbbox из библиотеки изображений Python (PIL) не работает - PullRequest
7 голосов
/ 26 марта 2012

Я хочу обрезать изображение до его меньшего размера, обрезая белые области на границах. Я попробовал решение, предложенное на этом форуме Обрезать изображение PNG до минимального размера , но метод pil из getbbox () возвращает ограничивающий прямоугольник изображения того же размера, т. Е. Кажется, что не распознает пустые места вокруг. Я попробовал следующее:

>>>import Image
>>>im=Image.open("myfile.png")
>>>print im.format, im.size, im.mode
>>>print im.getbbox()
PNG (2400,1800) RGBA
(0,0,2400,1800)

Я проверил, что мое изображение имеет действительно белые рамки, обрезая изображение с помощью автоматической обрезки GIMP. Я тоже попробовал с ps и eps версиями рисунка, без везения.
Любая помощь будет принята с благодарностью.

1 Ответ

19 голосов
/ 26 марта 2012

Проблема в том, что getbbox() обрезает черные границы, из документов: Calculates the bounding box of the non-zero regions in the image.

enter image description hereenter image description here

import Image    
im=Image.open("flowers_white_border.jpg")
print im.format, im.size, im.mode
print im.getbbox()
# white border output:
JPEG (300, 225) RGB
(0, 0, 300, 225)

im=Image.open("flowers_black_border.jpg")
print im.format, im.size, im.mode
print im.getbbox()
# black border output:
JPEG (300, 225) RGB
(16, 16, 288, 216) # cropped as desired

Мы можем легко исправитьбелые границы, сначала инвертируя изображение, используя ImageOps.invert, а затем используйте getbbox():

import ImageOps
im=Image.open("flowers_white_border.jpg")
invert_im = ImageOps.invert(im)
print invert_im.getbbox()
# output:
(16, 16, 288, 216)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...