7

Voglio ritagliare un'immagine alle sue dimensioni più piccole, tagliando le aree bianche sui bordi. Ho provato la soluzione suggerita in questo forum Crop a PNG image to its minimum size ma il metodo getbbox() di pil restituisce un riquadro di delimitazione della stessa dimensione dell'immagine, cioè sembra che non riconosca le aree vuote intorno. Ho provato quanto segue:metodo getbbox dalla libreria di immagini Python (PIL) non funzionante

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

ho controllato che la mia immagine non ha davvero confini bianchi croppable di ritagliare l'immagine con GIMP di ritaglio automatico. Ho anche provato con le versioni ps ed eps della figura, senza fortuna.
Qualsiasi aiuto sarebbe molto apprezzato.

risposta

16

Problema: getbbox() colture al di fuori dei bordi neri, dai documenti: 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 

Possiamo fare una soluzione semplice per i bordi bianchi, in primo luogo invertendo l'immagine utilizzando ImageOps.invert, e quindi utilizzare 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

Grazie molto per la veloce e risposta chiara. Ha funzionato, ma ho dovuto convertire prima da RGBA a RGB prima di usare invert, richiamando la funzione convert: invert_im = im.convert ("RGB") e quindi invert_im = ImageOps.invert (invert_im), altrimenti ho ottenuto un IOError " non supportato per questa modalità immagine ". – etepoc

+0

@ user1292774 - cool, felice ha funzionato .., se vuoi, puoi passare/e spuntare la freccia per accettare la risposta, in alto a sinistra, quindi entrambi otteniamo alcuni punti;) – fraxel

+0

Ho già provato a upvotare, ma Ho meno di 15 punti e il sistema non mi lascia per il momento, lo farò se mai avrò quei 15 punti. Grazie! – etepoc