gpt4 book ai didi

python - 将海龟图形保存为 .eps 文件时,背景颜色显示在屏幕上但未保存在 .eps 文件中

转载 作者:太空狗 更新时间:2023-10-30 01:16:26 25 4
gpt4 key购买 nike

我是 Python 的新手,一直在使用 turtle 模块作为学习这门语言的一种方式。

感谢 stackoverflow,我研究并学习了如何将图像复制到封装的 postscript 文件中,并且效果很好。然而,有一个问题。 turtle 模块允许在屏幕上显示但不在 .eps 文件中显示的背景颜色。所有其他颜色,即笔颜色和海龟颜色,都可以通过,但背景颜色不能通过。

有趣的是,我不认为导入 Tkinter 是必要的,因为我不认为我在这里使用任何 Tkinter 模块。我将其作为尝试诊断问题的一部分。我还使用了 bgcolor=Orange 而不是 s.bgcolor="orange"

没有快乐。

我包括一个简单的代码示例:

# Python 2.7.3 on a Mac

import turtle
from Tkinter import *

s=turtle.Screen()
s.bgcolor("orange")

bob = turtle.Turtle()
bob.circle(250)

ts=bob.getscreen()
ts.getcanvas().postscript(file = "turtle.eps")

我尝试发布屏幕图像和 .eps 文件,但 stackoverflow 不允许我作为新用户这样做。某种垃圾邮件预防。虽然很简单,但可以直观地看到,屏幕的背景颜色为橙色,而 eps 文件为白色。

output produced from .eps file

如果有任何想法,我将不胜感激。

最佳答案

Postscript 设计用于在纸张或胶片等介质上做标记,而不是光栅图形。因此,它本身没有可以设置为给定颜色的背景颜色,因为这通常是所用纸张或未曝光胶片的颜色。

为了模拟这一点,您需要绘制一个与 Canvas 大小相同的矩形,并用您想要的颜色填充它作为背景。我在 turtle 模块中没有看到任何东西来查询 getcanvas() 返回的 Canvas 对象。我能想到的唯一选择是读取 turtle.cfg 文件(如果有的话),或者只是硬编码默认的 300x400 大小。您也许可以查看源代码并找出当前 Canvas 尺寸的存储位置并直接访问它们。

更新:

我只是在 Python 控制台中玩弄 turtle模块并发现 Canvas 是什么 getcanvas() returns 有一个名为 _canvas 的私有(private)属性这是 <Tkinter.Canvas instance> .这个对象有 winfo_width()winfo_height()方法似乎包含当前海龟图形窗口的尺寸。因此,我会尝试绘制一个该尺寸的填充矩形,看看是否能满足您的需求。

更新 2:

这里的代码展示了如何按照我的建议进行操作。 注意:背景必须在绘制任何其他图形之前绘制,否则创建的实心填充背景矩形将覆盖屏幕上的所有其他内容。

此外,添加了 draw_background()函数努力保存图形状态,然后将其恢复到原来的状态。这可能不是必需的,具体取决于您的具体使用情况。

import turtle


def draw_background(a_turtle):
""" Draw a background rectangle. """
ts = a_turtle.getscreen()
canvas = ts.getcanvas()
height = ts.getcanvas()._canvas.winfo_height()
width = ts.getcanvas()._canvas.winfo_width()

turtleheading = a_turtle.heading()
turtlespeed = a_turtle.speed()
penposn = a_turtle.position()
penstate = a_turtle.pen()

a_turtle.penup()
a_turtle.speed(0) # fastest
a_turtle.goto(-width/2-2, -height/2+3)
a_turtle.fillcolor(turtle.Screen().bgcolor())
a_turtle.begin_fill()
a_turtle.setheading(0)
a_turtle.forward(width)
a_turtle.setheading(90)
a_turtle.forward(height)
a_turtle.setheading(180)
a_turtle.forward(width)
a_turtle.setheading(270)
a_turtle.forward(height)
a_turtle.end_fill()

a_turtle.penup()
a_turtle.setposition(*penposn)
a_turtle.pen(penstate)
a_turtle.setheading(turtleheading)
a_turtle.speed(turtlespeed)

s = turtle.Screen()
s.bgcolor("orange")

bob = turtle.Turtle()
draw_background(bob)

ts = bob.getscreen()
canvas = ts.getcanvas()

bob.circle(250)

canvas.postscript(file="turtle.eps")

s.exitonclick() # optional

这是实际产生的输出(通过 Photoshop 在屏幕上呈现):

output from eps file

关于python - 将海龟图形保存为 .eps 文件时,背景颜色显示在屏幕上但未保存在 .eps 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com