我有一些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。
答案 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")
允许它按预期运行。