【发布时间】:2017-09-15 18:38:51
【问题描述】:
我想旋转图像以跟随我的鼠标,而我的学校计算机没有 PIL。
【问题讨论】:
标签: python-3.x tkinter tkinter-canvas
我想旋转图像以跟随我的鼠标,而我的学校计算机没有 PIL。
【问题讨论】:
标签: python-3.x tkinter tkinter-canvas
Bryan 的回答在技术上是正确的,因为 PhotoImage 类不包含旋转方法,tk.Canvas 也不包含。但这并不意味着我们无法解决这个问题。
def copy_img(img):
newimg = tk.PhotoImage(width=img.width(), height=img.height())
for x in range(img.width()):
for y in range(img.height()):
rgb = '#%02x%02x%02x' % img.get(x, y)
newimg.put(rgb, (x, y))
return newimg
上面的函数创建了一个空白的 PhotoImage 对象,然后用传递给它的图像的数据填充新 PhotoImage 的每个像素,逐个像素地制作一个完美的副本......这是没有用的事情。
但是!假设您想要一个颠倒的图像副本。将函数中的最后一行更改为:
newimg.put(rgb, (x, img.height()-1 - y))
瞧!该函数仍然从上向下读取,但它从下向上写入,从而在 y 轴上生成镜像。是否希望它向右旋转 90 度?:
newimg.put(rgb, (img.height() - y, x))
将 y 替换为 x 使其为行写入列,有效地旋转它。
图像处理 PhotoImage 对象的深度取决于您。如果您可以访问 PIL (Python Imaging Library)... 基本上有人已经完成了这项工作,将其优化为速度和内存消耗的最佳选择,并将其打包成方便的类和函数。但如果你不能或不想要 PIL,你绝对可以旋转 PhotoImage。您只需要自己编写方法。
感谢 acw1668 的帖子让我了解了 PhotoImage 操作的基础知识: https://stackoverflow.com/a/41254261/9710971
【讨论】:
你不能。画布不支持旋转图像,内置的 PhotoImage 类也不支持。
来自official Canvas documentation:
可以使用下面描述的小部件命令移动或缩放单个项目,但不能旋转它们。
【讨论】: