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

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

【问题讨论】:

标签: python turtle-graphics vector-graphics python-turtle


【解决方案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 的更多功能。
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 2020-09-14
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多