私は現在Tkinterで画像を表示するためにPILを使用しています。これらの画像を一時的にサイズ変更して、より簡単に表示できるようにしたいと考えています。これについてどうすればいいですか?
スニペット:
self.pw.pic = ImageTk.PhotoImage(Image.open(self.pic_file))
self.pw.pic_label = TK.Label(self.pw , image=self.pw.pic,borderwidth=0)
self.pw.pic_label.grid(column=0,row=0)
これが私がすることです、そしてそれはかなりうまくいきます...
image = Image.open(Image_Location)
image = image.resize((250, 250), Image.ANTIALIAS) ## The (250, 250) is (height, width)
self.pw.pic = ImageTk.PhotoImage(image)
どうぞ:)
編集:
これが私のインポートステートメントです:
from Tkinter import *
import tkFont
from PIL import Image
そして、これは私がこの例を適応させた完全な作業コードです:
im_temp = Image.open(Image_Location)
im_temp = im_temp.resize((250, 250), Image.ANTIALIAS)
im_temp.save("ArtWrk.ppm", "ppm") ## The only reason I included this was to convert
## The image into a format that Tkinter woulden't complain about
self.photo = PhotoImage(file="ArtWrk.ppm") ## Open the image as a tkinter.PhotoImage class()
self.Artwork.destroy() ## Erase the last drawn picture (in the program the picture I used was changing)
self.Artwork = Label(self.frame, image=self.photo) ## Sets the image too the label
self.Artwork.photo = self.photo ## Make the image actually display (If I don't include this it won't display an image)
self.Artwork.pack() ## Repack the image
そして、ここにPhotoImageクラスのドキュメントがあります: http://www.pythonware.com/library/tkinter/introduction/photoimage.htm
注意... ImageTKのPhotoImageクラス(非常にまばらです)のpythonwareドキュメントを確認した後、スニペットが機能する場合は、PIL "Image"ライブラリとPIL "ImageTK"ライブラリをインポートする限り、 PILとtkinterの両方が最新であること。別のサイドノートでは、私は「ImageTK」モジュールの寿命を自分の人生で見つけることさえできません。インポートを投稿してもらえますか?
保存したくない場合は、試すことができます。
from Tkinter import *
from PIL import Image, ImageTk
root = Tk()
same = True
#n can't be zero, recommend 0.25-4
n=2
path = "../img/Stalin.jpeg"
image = Image.open(path)
[imageSizeWidth, imageSizeHeight] = image.size
newImageSizeWidth = int(imageSizeWidth*n)
if same:
newImageSizeHeight = int(imageSizeHeight*n)
else:
newImageSizeHeight = int(imageSizeHeight/n)
image = image.resize((newImageSizeWidth, newImageSizeHeight), Image.ANTIALIAS)
img = ImageTk.PhotoImage(image)
Canvas1 = Canvas(root)
Canvas1.create_image(newImageSizeWidth/2,newImageSizeHeight/2,image = img)
Canvas1.config(bg="blue",width = newImageSizeWidth, height = newImageSizeHeight)
Canvas1.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
最も簡単なのは、元の画像に基づいて新しい画像を作成してから、元の画像をより大きなコピーと交換することです。そのため、tk画像にはcopy
メソッドがあり、コピーを作成するときに元の画像をズームまたはサブサンプリングできます。残念ながら、2倍に拡大/縮小できるのは2倍です。