метод 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
.
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)