You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何保存的Turtle绘图背景非设置黑色?如何修复代码

解决Turtle绘图保存后背景不是黑色的问题

问题原因

Turtle通过getcanvas().postscript()生成的EPS矢量文件默认不包含画布背景色,背景为透明状态。当用PIL将EPS格式转为JPG时,透明区域会被自动填充为白色,这就是保存后的图像背景不是黑色的核心原因。

修复方案

以下两种方法均可解决问题,任选其一即可:

方法1:生成EPS时直接指定黑色背景

修改postscript()方法的调用参数,添加colormode='color'和bg='black',让生成的EPS文件自带黑色背景:

from PIL import Image, EpsImagePlugin
import os
import turtle

EpsImagePlugin.gs_windows_binary=r'C:\Program Files\gs\gs10.01.2\bin\gswin64c'

# 绘制图形
point = turtle.Turtle()
point.speed(0)
point.color('yellow')
point.penup()
point.sety(-6*25)
point.pendown()

point.begin_fill()
point.circle(6*25, steps=6)
point.end_fill()

point.hideturtle()

# 设置画布背景并生成带背景的EPS
screen = turtle.Screen()
screen.bgcolor('black')
board = screen.getcanvas()
# 添加colormode和bg参数,指定黑色背景
board.postscript(file="test_drawing.eps", colormode='color', bg='black')

# 转换为JPG并查看
Image.open("test_drawing.eps").save("test_drawing.jpg", "JPEG")
Image.open(r'C:\Users\parth\Desktop\coding\test_drawing.jpg').show()
# 旋转并保持黑色背景
Image.open(r'C:\Users\parth\Desktop\coding\test_drawing.jpg').rotate(45, fillcolor='black', expand=True).show()

os.remove(path=r'C:\Users\parth\Desktop\coding\test_drawing.jpg')

方法2:用PIL给JPG图像添加黑色背景

如果需要保留原始EPS的透明属性,可在转JPG后手动创建黑色背景画布,将绘制的图像粘贴上去:

from PIL import Image, EpsImagePlugin
import os
import turtle

EpsImagePlugin.gs_windows_binary=r'C:\Program Files\gs\gs10.01.2\bin\gswin64c'

# 绘制图形部分不变
point = turtle.Turtle()
point.speed(0)
point.color('yellow')
point.penup()
point.sety(-6*25)
point.pendown()

point.begin_fill()
point.circle(6*25, steps=6)
point.end_fill()

point.hideturtle()

screen = turtle.Screen()
screen.bgcolor('black')
board = screen.getcanvas()
board.postscript(file="test_drawing.eps")

# 转换时添加黑色背景
eps_img = Image.open("test_drawing.eps")
# 创建与原图尺寸相同的黑色背景画布
bg_img = Image.new("RGB", eps_img.size, (0, 0, 0))
# 将EPS图像粘贴到黑色背景上(利用alpha通道处理透明区域)
bg_img.paste(eps_img, mask=eps_img.split()[3])
bg_img.save("test_drawing.jpg", "JPEG")

Image.open(r'C:\Users\parth\Desktop\coding\test_drawing.jpg').show()
Image.open(r'C:\Users\parth\Desktop\coding\test_drawing.jpg').rotate(45, fillcolor='black', expand=True).show()

os.remove(path=r'C:\Users\parth\Desktop\coding\test_drawing.jpg')

说明

  • 方法1更直接,生成的EPS本身包含背景色,后续转换无需额外处理;
  • 方法2适合需要保留原始EPS透明背景,仅在转JPG阶段添加背景的场景。

内容的提问来源于stack exchange,提问作者Parth Ratra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:06:30