【发布时间】:2023-03-16 04:29:01
【问题描述】:
我正在尝试使用 Python Turtle 绘制一些图像,但我无法确定屏幕尺寸/画布尺寸。
这是我必须创建的当前图像:
import turtle
import math
from PIL import Image
import os
t = turtle.Turtle()
Image.MAX_IMAGE_PIXELS = None
screen = turtle.Screen()
fileName = "test"
seedString = fileName
turtle.setup(int(15000),int(15000),int(7500),int(7500))
turtle.screensize(int(15000), int(15000))
turtle.hideturtle()
screen.tracer(False)
t.pen(pensize=2, pencolor='black')
print(screen.screensize())
print(t.pos())
t.color('black')
t.begin_fill()
t.goto(7500,0)
t.right(90)
t.forward(7500)
t.right(90)
t.forward(15000)
t.right(90)
t.forward(15000)
t.right(90)
t.forward(15000)
t.right(90)
t.forward(7500)
t.end_fill()
print(t.pos())
t.goto(0,0)
t.pen(pencolor='white', pensize=5)
t.circle(4000, 360)
print(t.pos())
print(screen.screensize())
canvas = screen.getcanvas()
canvas.postscript(file=fileName, height=15000, width=15000)
img = Image.open(fileName)
img.save(seedString+'.jpg')
img.close()
os.system('move \"'+fileName+'\" somefilelocation')
os.system('move \"'+seedString+'.jpg\" somefilelocation')
根据我的理解,此脚本应将 屏幕尺寸 设置为 15,000 x 15,000 像素,并使用 turtle.setup() 将原点移动到 (7,500,7,500) 处的中心。我不确定这是画布还是我们看到乌龟在其中移动的窗口。但我还包括了 turtle.screensize() 函数将其设置为 15000 x 15000。也许这是多余的,因为它调整了同样的事情,但文档对此有点模糊。
最后我保存了一个大小相同的 15000 x 15000 像素的 PS 文件,但创建的是这个图像:
我添加了边框,以使图像的实际尺寸更易于查看。
我很难理解的是几件事。如果 setup() 和 screensize() 函数实际上只是更改窗口大小本身,那么我如何更改创建绘图的实际画布的大小。其次,我首先手动绘制一个矩形,该矩形由上面的 goto() 和 right() 函数组合填充为黑色。但是图像本身(这篇文章中的那个是为了大小而缩放的)保存为 11251 x 11251。这不仅对我没有意义,因为我将保存的 PS 文件设置为 15000 x 15000,但即使保存后原始图像是 11251 x 11251 那么为什么是我的矩形,根据我的脚本编写方式,它应该是 15000 x 15000,比这小得多。此外,原点不会出现在黑色矩形或保存的整个画布/图像的中心附近。
最后我不明白为什么 circle() 函数只产生一个半圆,尽管我明确地将范围参数设置为 360。我将它保留为 0,默认为一个完整的圆,它产生了相同的半圆。
我尝试只包括设置或屏幕尺寸,使用绝对值(如 1.0 与像素值),但似乎没有什么能满足我的需求。这是一个 15000 x 15000 像素的图像,从原点绘制一个圆圈,作为画布的中心 (7500,7500)。我知道这不会是圆本身的中心,因为它从边缘开始并从该点到它上方或下方的点(半径,0)创建一个圆。但这不是我的脚本当前的工作方式。
很明显,我没有掌握一个基本的理解。任何帮助都将不胜感激,因为我很想了解有关此库的更多信息并更好地了解画布/坐标系以更准确地创建图像。
谢谢!
【问题讨论】:
-
所以我刚刚发现,我当前保存图像的方法实际上取决于启动海龟脚本时显示的窗口本身的大小。我认为画布和窗口大小是独立的,因此如果海龟超出 Window 参数,则使用滚动条?
-
因此使用所有窗口具有的传统最小化/最大化按钮调整窗口本身的大小实际上会影响保存为“画布”的内容,因此它们不是独立的。那么如何创建比我的显示器屏幕更大的图像呢?有没有办法在没有那个窗口的情况下绘制图像?只是在后台创建并保存我指定尺寸的图像?
-
setup()和screensize()做不同的事情,请参阅 this answer 了解差异的解释。
标签: python turtle-graphics python-turtle