Turtle 模块 - 保存图像

Posted

技术标签:

【中文标题】Turtle 模块 - 保存图像【英文标题】:Turtle module - Saving an image 【发布时间】:2011-05-03 13:35:36 【问题描述】:

我想知道如何在使用 python 的海龟模块创建绘图后保存位图或矢量图形图像。经过一番谷歌搜索后,我找不到简单的答案。我确实找到了一个名为canvas2svg 的模块,但我对python 很陌生,我不知道如何安装该模块。是否有一些内置方法可以保存海龟画布的图像?如果不是,我应该在 Ubuntu 机器上将 python 的自定义模块放在哪里?

【问题讨论】:

如果您想在程序执行结束时透明地保存图像(对帮助对终止的学生作业评分有半有用的),请查看:github.com/ucsb-cs/cTurtle_screenshot 【参考方案1】:
from tkinter import *  # Python 3
#from Tkinter import *  # Python 2
import turtle


turtle.forward(100)
ts = turtle.getscreen()

ts.getcanvas().postscript(file="duck.eps")

这将对您有所帮助;我遇到了同样的问题,我用谷歌搜索过,但通过阅读海龟模块的源代码解决了它。

canvas(tkinter)对象具有postscript功能;你可以使用它。

turtle 模块具有“getscreen”,它为您提供“turtle screen”,它为您提供海龟正在绘制的 Tiknter 画布。

这会将您保存为封装的 PostScript 格式,因此您可以肯定地在 GIMP 中使用它,但也有其他查看器。或者,您可以谷歌如何从中制作 .gif。您也可以使用免费和开源的 Inkscape 应用程序来查看 .eps 文件,然后将它们保存为矢量或位图图像文件。

【讨论】:

在python 2.7的turtle中,已经有了postscript功能。所以,你不需要单独导入 Tkinter。 我想补充一点,EPS文件保存在与脚本相同的位置。 这可行,但您不需要导入 Tkiner。但我需要从 Turtle() 的实例中获取屏幕【参考方案2】:

我编写了支持 Python 标准 Turtle 接口的 svg-turtle package,并使用 svgwrite 模块编写了一个 SVG 文件。用pip install svg-turtle安装,然后这样调用:

from svg_turtle import SvgTurtle


def draw_spiral(t):
    t.fillcolor('blue')
    t.begin_fill()
    for i in range(20):
        d = 50 + i*i*1.5
        t.pencolor(0, 0.05*i, 0)
        t.width(i)
        t.forward(d)
        t.right(144)
    t.end_fill()


def write_file(draw_func, filename, width, height):
    t = SvgTurtle(width, height)
    draw_func(t)
    t.save_as(filename)


def main():
    write_file(draw_spiral, 'example.svg', 500, 500)
    print('Done.')


if __name__ == '__main__':
    main()

canvasvg package 是另一种选择。运行一些海龟代码后,它会将tkinter 画布上的所有项目转换为 SVG 文件。这需要tkinter 支持和显示,而 svg-turtle 不需要。

【讨论】:

我相信你应该有draw_spiral() --> draw_spiral() In def write_file 我猜你的意思是draw_spiral() --> draw_func(), @Mr.Weathers。没错,这就是我的本意,所以我已经解决了。 太棒了,问题是 _Screen 对象以这种方式失去了很多属性,因为它被 SvgTurtle 屏幕覆盖了。您可以灵活地在多个绘制通道中组合图像,例如 clear() 或获取屏幕尺寸并在您的函数中使用它... 我的新版本支持标准Turtle、@diramazioni 的更多功能。

以上是关于Turtle 模块 - 保存图像的主要内容,如果未能解决你的问题,请参考以下文章

pycharm 调用turtle模块时,窗口闪屏不能显示

python里d是什么意思?

利用turtle模块画图

#18 turtle模块

Python用turtle模块画图

用Python的turtle模块画生日蛋糕