我一直在使用turtle模块,并希望以此为起点来开发可以识别数字/字母的简单图像识别程序。我需要将乌龟另存为可以操纵的图像,例如重新缩放,旋转等,以尝试调整图像。我已经研究了几个小时,似乎找不到任何有效的方法。我发现了如何将Turtle输出保存为Tkinter画布:
import turtle
t = turtle.Turtle()
# Draw something
canvas = t.getscreen().getcanvas() # Saves a Tkinter canvas object
这似乎很棒。下一步是将其另存为.png或.jpg。但是,我唯一能找到的就是如何将其另存为Postscript文件:
canvas.postscript(file="turtle_img.ps") # Saves as a .ps file
[从那里,我试图使用PIL将.ps文件转换为.png或.jpeg文件。这是我的代码以及出现的错误:
from PIL import Image
turtle_img = Image.open("turtle_img.ps")
turtle_img.save("turtle_img", "png")
# Also tried: turtle_img.save("turtle_img, "jpeg")
运行“ turtle_img.save(” turtle_img“,” png“)行会产生:
OSError: Unable to locate Ghostscript on paths
我希望以下其中一项:1.一种将.ps转换为.jpeg,.png甚至位图的方法2.另一种保存Tkinter画布的方法,更易于使用
编辑:我想澄清的是,我将使用大量此类文件,并且希望在脚本中自动执行该过程,而不是对每个图像使用命令行。
所有答案将不胜感激!提前谢谢。
您可以使用Ghostscript将PostScript程序呈现为位图。例如:
gs -sDEVICE=png16m -o out.png input.ps
[还有其他文件格式和颜色深度,例如png256,jpeg等。如果是多页输入文件,则:
gs -sDEVICE=png16m -o out%d.png input.ps
如果将.png
包含在turtle
中,则可以直接将画布另存为tkinter canvas
。这很容易做到。
然后可以自动抓取.png
图像,或者单击按钮或按一下键即可。
这里是将turtle
嵌入tk.Canvas
中,绘制Sierpinski垫片并自动将生成的图像保存在磁盘上的示例。
import tkinter as tk
from PIL import ImageGrab
import turtle
def dump_gui():
"""
takes a png screenshot of a tkinter window, and saves it on in cwd
"""
print('...dumping gui window to png')
x0 = root.winfo_rootx()
y0 = root.winfo_rooty()
x1 = x0 + root.winfo_width()
y1 = y0 + root.winfo_height()
ImageGrab.grab().crop((x0, y0, x1, y1)).save("gui_image_grabbed.png")
def draw_sierpinski(length,depth):
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
t.left(60)
t.bk(length/2)
t.right(60)
root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
t = turtle.RawTurtle(canvas)
draw_sierpinski(150, 4)
dump_gui()
root.mainloop()