7

境界線の白い部分を切り取って、より小さなサイズに画像を切り抜きたい。私はこのフォーラムで提案されている解決策を試しましたが、pilのgetbbox()メソッドは画像の同じサイズのバウンディングボックスを返しています。つまり、空白の領域を認識できないようです。私は、次のことを試してみました:pythonイメージライブラリ(PIL)のgetbboxメソッドが動作しない

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

私は私のイメージは、GIMPの自動トリミングで画像をトリミングすることにより、真の白croppable国境を持っていることを確認しました。私は運がなければ、図のpsとepsバージョンでも試しました。
ご協力いただければ幸いです。

答えて

16

問題は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) 
+3

は、高速のためにあなたに多くのことを感謝し、明確な応答。それはうまくいったが、逆変換を使う前に、関数convert:invert_im = im.convert( "RGB")を呼び出し、次にinvert_im = ImageOps.invert(invert_im)を呼び出す前に、まずRGBAからRGBに変換しなければならなかった。この画像モードではサポートされていません "。 – etepoc

+0

@ user1292774 - あなたが好きなら、うまくいけばうれしいですよ、左上の答えを受け入れるために矢印を押してください。 – fraxel

+0

私はすでにupvoteを試みましたが、私は15ポイント未満で、システムは私を瞬間にさせません。もし私が15ポイントを獲得すれば、私はやります。ありがとうございました! – etepoc

関連する問題