2011-07-05 13 views
9

の下でサイズを変更GIF/PGM/PPM、光画像クラスは私のためokです:画像私は画像のサイズを変更する必要がありますが、私はそれはOS Xの下で動作させることができないので、PILを避けたい光画像

photoImg = PhotoImage(file=imgfn) 
images.append(photoImg) 
text.image_create(INSERT, image=photoImg) 

問題がある - 私は、画像のサイズを変更する方法は? 以下は、PILと同等のPILでのみ動作しますか?

img = Image.open(imgfn) 
img = img.resize((w,h), Image.ANTIALIAS) 
photoImg = ImageTk.PhotoImage(img) 
images.append(photoImg) 
text.image_create(INSERT, image=photoImg) 

ありがとうございます!

答えて

7

PhotoImageクラスのsubsample()またはzoom()メソッドを使用する必要があります。あなたが最初のスケールファクタを計算する必要が最初のオプションの場合は、単純に次の行で説明:zoom()subsample()の両方をパラメータとして整数をしたいので

scale_w = new_width/old_width 
scale_h = new_height/old_height 
photoImg.zoom(scale_w, scale_h) 
+0

私が必要なもの!問題は、zoom()が整数引数を必要とすることです。これは、640x480から320x240にリスケールしたいので少し奇妙です。その場合、ズーム(0,0)を取得します。または、2倍未満の小さな要素をズームインする – alessandro

+1

次に、 'subsample'メソッドを使用する必要があります。 – Constantinius

+1

私はそれがする必要がありますね!ちょうど見つかった_おそらく単一のサイズ変更メソッドを持っている方が便利かも知れませんでしたが、Tkデザイナーはそれを考えませんでした(必要ならPILを使用してください)_ http://effbot.org/zone/ tkinter-photoimage-grayscale-ramp.htm – alessandro

10

、私は両方を使用していました。

私は250×250に320×320の画像サイズを変更しなければならなかった、私はちょうど同じ問題を抱えていた、と私は@Memes'答えはかなりうまく機能することを発見

imgpath = '/path/to/img.png' 
img = PhotoImage(file=imgpath) 
img = img.zoom(25) #with 250, I ended up running out of memory 
img = img.subsample(32) #mechanically, here it is adjusted to 32 instead of 320 
panel = Label(root, image = img) 
1

になってしまいました。 subsample()は何らかの理由で実行するのに時間がかかりますので、できるだけ比率を減らすようにしてください。

基本的に、画像は2つのサイズのうちの最小公約数にズームアウトされ、その後、元のサイズで補助されます。これにより、希望するサイズの画像が残されます。

関連する問題