TKinter如果不是RGB

时间:2017-07-11 21:00:55

标签: python tkinter python-imaging-library

我有一些Tkinter代码在画布中间显示一个图像:

class MyClass():
    def __init__(self):
        self.root = tk.Tk()
        width=1280
        height=720

        self.testImage = Image.open("Drawing.png")
        self.canvas = tk.Canvas(self.root,height=height,width=width,bg='blue')

        # from some SO post
        basewidth=720
        wpercent = (basewidth/float(self.testImage.size[0]))
        hsize = int((float(self.testImage.size[1])*float(wpercent)))

        self.testImage = self.testImage.resize((400,400),PIL.Image.ANTIALIAS)
        self.photo = ImageTk.PhotoImage(self.testImage)
        self.canvas.create_image(width/2,height/2,image=self.photo)
        self.canvas.pack(side="top", fill="both", expand=True)

这会在蓝色1280x720画布中间显示我的图像。如果我将调整大小更改为:

        self.testImage = self.testImage.resize((500,500),PIL.Image.ANTIALIAS)

我得到一个空的蓝色1280x720画布。我正在努力使图像缩放以填充画布,但如果我的图像大小超过400x400,它就会消失。我的基本图像文件是3000x2000左右的PNG。

2 个答案:

答案 0 :(得分:0)

  

问题:您使用Canvas widht/height create_image(...,请尝试以下操作:

def __init__(self):
    self.root = tk.Tk()
    width=1280; height=720
    self.canvas = tk.Canvas(self.root,height=height,width=width,bg='blue')

    self.testImage = Image.open("Drawing.png")
    self.testImage = self.testImage.resize((width,height),PIL.Image.BILINEAR)

    width,height=self.testImage.size
    self.photo = ImageTk.PhotoImage(self.testImage)
    self.canvas.create_image(width/2,height/2,image=self.photo)
    self.canvas.pack(side="top", fill="both", expand=True)

请考虑以下示例:viewing-large-images-with-scrollbars-using-python-tk-and-pil/

  

评论:...使用BILINEAR我可以扩展...在800x720消失之前

在脚本之外考虑down sample您的图片 1280x720 ,而不是脚本内的down sizeing

根据Pillow文档,不支持过滤器PIL.Image.ANTIALIAS

Image.resize(size, resample=0)
     

返回此图片的已调整大小的副本   参数:

     

size - 请求的大小(以像素为单位),为2元组:(宽度,高度)   resample - 可选的重采样过滤器   这可以是PIL.Image.NEAREST,PIL.Image.BOX,PIL.Image.BILINEAR,PIL.Image.HAMMING,PIL.Image.BICUBIC或PIL.Image.LANCZOS之一。
  如果省略,或者图像具有模式“1”或“P”,则设置为PIL.Image.NEAREST。
  请参阅:Filters

答案 1 :(得分:0)

我设法使用找到的here解决方案解决了这个问题。

简单地改变:
self.testImage = Image.open("Drawing.png")

self.testImage = Image.open("Drawing.png").convert("RGB")
允许它按预期运行。