метод getbbox из библиотеки изображений python (PIL) не работает

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

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

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

1 ответов


беда в том 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)