7

Ich möchte ein Bild auf seine kleinere Größe zuschneiden, indem Sie die weißen Flächen an den Rändern schneiden. Ich habe die in diesem Forum vorgeschlagene Lösung Crop a PNG image to its minimum size versucht, aber die Methode getbbox() von pil gibt eine Bounding Box derselben Größe des Bildes zurück, d. H. Es scheint, dass es die leeren Bereiche nicht erkennt. Ich habe versucht, die folgenden:Getbbox-Methode von Python-Image-Bibliothek (PIL) funktioniert nicht

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

Ich habe, dass mein Bild wirklich weiß croppable Grenzen hat, indem das Bild mit GIMP Auto-Ernte Zuschneiden. Ich habe auch mit PS und EPS-Versionen der Figur versucht, ohne Glück.
Jede Hilfe würde sehr geschätzt werden.

Antwort

16

Das Problem ist getbbox() Ernten aus den schwarzen Grenzen, aus der Dokumentation: 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 

Wir können für weißen Ränder eine einfache Lösung tun, indem man zuerst die Bildumkehr ImageOps.invert verwenden, und verwenden Sie dann 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

Vielen Dank viel für die schnellen und klare Antwort. Es funktionierte, aber ich musste zuerst von RGBA in RGB umwandeln, bevor ich invert benutzte, indem ich die Funktion convert anwendete: invert_im = im.convert ("RGB") und dann invert_im = ImageOps.invert (invert_im), sonst erhielt ich einen IOError " nicht für diesen Bildmodus unterstützt ". – etepoc

+0

@ user1292774 - cool, froh, es hat geklappt .., wenn du magst, kannst du den Pfeil ankreuzen/ankreuzen, um die Antwort zu akzeptieren, oben links, dann bekommen wir beide Punkte;) – fraxel

+0

habe ich schon versucht zu upvoten, aber Ich habe weniger als 15 Punkte und das System lässt mich nicht im Moment, ich werde tun, wenn ich diese 15 Punkte bekomme. Vielen Dank! – etepoc