7

quiero recortar una imagen a su tamaño más pequeño, cortando las áreas blancas en las fronteras. Probé la solución sugerida en este foro Crop a PNG image to its minimum size pero el método getbbox() de pil devuelve un cuadro delimitador del mismo tamaño de la imagen, es decir, parece que no reconoce las áreas en blanco. He intentado lo siguiente:método getbbox de la biblioteca de imágenes de Python (PIL) que no trabaja

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

he comprobado que mi imagen tiene verdaderamente blancos fronteras croppable por recortar la imagen con el recorte automático GIMP. También probé con las versiones ps y eps de la figura, sin suerte.
Cualquier ayuda sería muy apreciada.

Respuesta

16

Problema es getbbox() cultivos fuera de los bordes negros, de los documentos: 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 

Podemos hacer una solución fácil para los bordes blancos, mediante la inversión de la imagen utilizando ImageOps.invert, y luego usar getbbox():

import ImageOps 
im=Image.open("flowers_white_border.jpg") 
invert_im = ImageOps.invert(im) 
print invert_im.getbbox() 
# output: 
(16, 16, 288, 216) 
+3

Gracias mucho por el rápido y respuesta clara Funcionó, pero tuve que convertir primero de RGBA a RGB antes de usar Invertir, llamando a la función convertir: invert_im = im.convert ("RGB") y luego invert_im = ImageOps.invert (invert_im), de lo contrario obtuve un IOError " no compatible con este modo de imagen ". – etepoc

+0

@ user1292774 - fresco, alegre él trabajó .., si lo desea, puede upvote/y marque la flecha para aceptar la respuesta, en la parte superior izquierda, a continuación, cada uno obtendrá algunos puntos;) – fraxel

+0

ya traté de upvote, pero Tengo menos de 15 puntos y el sistema no me deja por el momento, lo haré si alguna vez obtengo esos 15 puntos. ¡Gracias! – etepoc

Cuestiones relacionadas