海龟模块 - 保存图像

43 投票
2 回答
55379 浏览
提问于 2025-04-16 06:24

我想知道如何在用Python的turtle模块绘图后保存一个位图或矢量图像。经过一番搜索,我没有找到简单的答案。我发现了一个叫做canvas2svg的模块,但我对Python还很陌生,不知道怎么安装这个模块。有没有什么内置的方法可以保存turtle画布的图像?如果没有的话,我该把自定义模块放在哪里呢,在Ubuntu系统上?

2 个回答

9

我写了一个叫做 svg-turtle 的工具包,它支持Python的标准海龟接口,并使用 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 工具包。在你运行一些海龟代码后,它会把 tkinter 画布上的所有内容转换成SVG文件。使用这个工具包需要有 tkinter 的支持和一个显示屏,而svg-turtle则不需要这些。

54
from tkinter import *  # Python 3
#from Tkinter import *  # Python 2
import turtle


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

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

这对你会有帮助;我之前也遇到过同样的问题,我在网上查了资料,但最终是通过阅读turtle模块的源代码解决的。

canvas(tkinter)对象有一个叫做postscript的功能,你可以使用它。

turtle模块里有一个“getscreen”的方法,它可以让你获取“turtle屏幕”,这个屏幕就是turtle在上面绘图的tkinter画布。

这个功能会把你的图保存为封装的PostScript格式,所以你可以在GIMP中使用它,当然还有其他的查看器也可以用。或者,你可以在网上查一下如何从这个格式制作.gif文件。你还可以使用免费的开源软件Inkscape来查看.eps文件,然后把它们保存为矢量图或位图文件。

撰写回答