我已经实现了一个带有缩放功能的 Tkinter 画布对象,在另一个堆栈交换帖子之后做了一些修改。功能是:
def wheel(self, event):
''' Zoom with mouse wheel '''
scale = 1.0
if self.imscale > 6 and event.delta == 120:
return
# Respond to Linux (event.num) or Windows (event.delta) wheel event
if event.delta == -120:
scale -= .5
self.imscale -= .5
if event.delta == 120:
scale += .5
self.imscale += .5
# Rescale all canvas objects
x = self.canvas.canvasx(event.x)
y = self.canvas.canvasy(event.y)
self.canvas.scale('all', x, y, scale, scale)
self.show_image()
self.canvas.configure(scrollregion=self.canvas.bbox('all'))
def show_image(self):
''' Show image on the Canvas '''
if self.imageid:
self.canvas.delete(self.imageid)
self.imageid = None
self.canvas.imagetk = None # delete previous image from the canvas
width, height = self.image.size
new_size = int(self.imscale * width), int(self.imscale * height)
imagetk = ImageTk.PhotoImage(self.image.resize(new_size))
# Use self.text object to set proper coordinates
self.imageid = self.canvas.create_image(self.canvas.coords(self.text),
anchor='nw', image=imagetk)
self.canvas.lower(self.imageid) # set it into background
self.canvas.imagetk = imagetk # keep an extra reference to prevent garbage-collection
但是,当使用此缩放功能时,所讨论的图像会模糊,尽管它是不应该模糊的像素艺术图像?发生。
我环顾四周,看到提到 windll.shcore.SetProcessDpiAwareness(1) 是一个可能的解决方案,但我将其添加到我的脚本中,但没有任何改变。
我附上了模糊的 tkinter 缩放图像的图片,以及使用 MS Paint 放大的图像的“真实”图片。
任何帮助将不胜感激!我希望 ~ 更喜欢 ~ 不必离开 Tkinter,但如果没有其他可能的解决方案,我可以。
答案 0 :(得分:0)
啊,在评论中的 Abhishek Aggarwal 的帮助下回答了我自己的问题! ANTIALIAS 不能用作重采样过滤器,但我尝试了 NEAREST 并完全解决了它。
谢谢!