画像のサイズを変更する必要がありますが、OS Xで機能させることができないため、PILは使用したくありません。理由を聞かないでください...
とにかく、私はgif/pgm/ppmで満足しているので、PhotoImageクラスは大丈夫です:
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)
ありがとうございました!
PhotoImage
クラスのsubsample()
またはzoom()
メソッドを使用する必要があります。最初のオプションでは、最初にスケール係数を計算する必要があります。これは、次の行で簡単に説明されています。
scale_w = new_width/old_width
scale_h = new_height/old_height
photoImg.zoom(scale_w, scale_h)
zoom()
とsubsample()
はどちらもパラメーターとして整数が必要なので、両方を使用しました。
320x320の画像を250x250にサイズ変更する必要があり、
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)
from tkinter import *
import tkinter
import tkinter.messagebox
from PIL import Image
from PIL import ImageTk
master = Tk()
def callback():
print("click!")
width = 50
height = 50
img = Image.open("dir.png")
img = img.resize((width,height), Image.ANTIALIAS)
photoImg = ImageTk.PhotoImage(img)
b = Button(master,image=photoImg, command=callback, width=50)
b.pack()
mainloop()
私は同じ問題を抱えていましたが、@ Memesの回答はかなりうまくいくことがわかりました。 subsample()
は、何らかの理由で実行にかなり長い時間がかかるため、比率をできるだけ低くするようにしてください。
基本的に、画像は2つのサイズの最小公倍数にズームアウトされ、その後、元のサイズによって補助されます。これにより、希望のサイズのイメージが残ります。