图像在PhotoImage下调整大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像在PhotoImage下调整大小相关的知识,希望对你有一定的参考价值。

我需要调整图像大小,但我想避免使用PIL,因为我无法在OS X下使其工作 - 不要问我为什么...

无论如何,因为我对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) 

谢谢!

答案

你必须使用subsample()zoom()类的PhotoImage方法。对于第一个选项,您首先必须计算比例因子,只需在以下行中解释:

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)
另一答案

If you don't have PIL installed --> install it

(for Python3+ users --> use 'pip install pillow' in cmd)

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()由于某种原因需要相当长的时间才能运行。

基本上,图像缩小到两种尺寸的最小公因子,然后由原始尺寸补贴。这将为您留下所需大小的图像。

以上是关于图像在PhotoImage下调整大小的主要内容,如果未能解决你的问题,请参考以下文章

ImageTk.PhotoImage 崩溃

如何在不使用css调整第一个图像大小的情况下在Wordpress页面上调整第二个图像的大小?

计算用于调整大小的图像大小比率

Phalcon 图像调整大小

在这种情况下GD有啥理由压缩我调整大小的图像

python如何在不损失质量的情况下调整(缩小)图像的大小