2012-03-09 84 views
2

私はイメージサイズのテーブルを持っています。 7(66x66,400x400など)のようです。 そして、私は画像の一例を持っています。オリジナルは、常に600x532のサイズです。 このオリジナルでは、テレビ、PC、いくつかの製品があります。 この画像のサイズを変更する必要があります。問題ない。しかし、私が比例すると、66x55のようなものが得られます。私が比例関係をしていなければ、イメージは良く見えません。イメージに余分な領域を追加するPython

元の背景は常に白です。イメージの領域を拡張し、残りを白く塗りつぶす方法はありますか? このように:600x532 - > 600x600 - > 66x66など

これは抗作物のようなものです。

EDIT:PILからcrop()を使用し、実際のイメージサイズを超える値を使用して「最小化」する代わりに余分な領域が作成されることがわかりました。しかしそれは黒くなるでしょう。 どのように私はこのエリアを白く塗ることができますか?

EDIT2:ImageDrawとは関係があります。

EDIT3:ImageDrawが解決策であることを知った後、私の問題は解決されました。これを閉じてください。

ここに私の解決策:

import Image, ImageDraw 
img1 = Image.open("img.jpg") 
img2 = img1.crop((0,0,600,600)) 
draw = ImageDraw.Draw(img2) 
draw.rectangle((0,532,600,600), fill='white') 
del draw 
img2.save("img2.jpg","JPEG", quality=75) 

私は行います次のことは上記と下の余分な作物を作ることです。したがって、写真は真ん中にとどまります。

EDIT4:最終的な解決策

img1 = Image.open("img1.jpg") 
img2 = img1.crop((0,-34,600,566)) 
draw = ImageDraw.Draw(img2) 
draw.rectangle((0,0,600,34), fill="white") 
draw.rectangle((0,566,600,600), fill="white") 
del draw 
img2.save("img2.jpg", "JPEG", quality=75) 
+0

内部の素敵な例があります。あなたはイメージを表現するために使用していますか?あなたの画像がNumPyの配列の場合、新しい白い画像を作成し、元のピクセルを新しいものにコピーすることは問題ありません。 –

+0

私はPython Image Libraryを使用しています。しかし、私はすでに知っていた。しかし、より良い解決策がある場合、私は聞いて喜んででしょう:) –

+0

あなた自身の質問への答えとして解決策を投稿してください。その後、あなたはそれを自分で閉じることができます(24時間後)。 –

答えて

8

我々はあなたがPIL Imageオブジェクトのサイズを変更することができ、画像

from PIL import Image 

def white_bg_square(img): 
    "return a white-background-color image having the img in exact center" 
    size = (max(img.size),)*2 
    layer = Image.new('RGB', size, (255,255,255)) 
    layer.paste(img, tuple(map(lambda x:(x[0]-x[1])/2, zip(size, img.size)))) 
    return layer 

を処理するためにPILを使用すると仮定すると、例えばIMG

img.resize((width, height), resample=Image.ANTIALIAS) 

したがって中Pythonシェル、それはのように見える

>>> from PIL import Image 
>>> img = Image.open('path/to/image') 
>>> square_one = white_bg_square(img) 
>>> square_one.resize((100, 100), Image.ANTIALIAS) 
>>> square_one.save('path/to/result') 

は何のライブラリ/クラスPIL文書とSORLサムネイル3.2.5

+0

この回答も別の解決方法を見てください。http://stackoverflow.com/questions/11664038/fill-color-of-pil-cropping-thumbnailing –

1

私の最終的な解決策

img1 = Image.open("img1.jpg") 
img2 = img1.crop((0,-34,600,566)) 
draw = ImageDraw.Draw(img2) 
draw.rectangle((0,0,600,34), fill="white") 
draw.rectangle((0,566,600,600), fill="white") 
del draw 
img2.save("img2.jpg", "JPEG", quality=75) 
関連する問題