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

如何在Python的drawSvg库中用位图/矢量图填充矩形?

在drawSvg中使用位图/矢量图填充矩形

直接将文件路径赋值给矩形的fill参数无法生效,因为fill仅接受颜色值、渐变对象或图案对象(Pattern)。需要先将位图或矢量图封装为Pattern,再将其设为矩形的填充值。

一、位图(JPG/PNG/BMP)填充示例

import drawSvg as draw

# 创建画布
canvas_width, canvas_height = 200, 200
d = draw.Drawing(canvas_width, canvas_height, origin=(0, 0), displayInline=False)

# 1. 创建图案容器,设置图案的重复单元尺寸
bitmap_pattern = draw.Pattern(0, 0, 50, 50)
# 2. 加载位图,尺寸需与图案单元一致
bitmap = draw.Image(0, 0, 50, 50, 'test.png')  # 替换为你的位图路径
bitmap_pattern.append(bitmap)

# 3. 创建填充矩形,将fill设为图案对象
rect = draw.Rectangle(0, 0, canvas_width, canvas_height, fill=bitmap_pattern, stroke='black')
d.append(rect)

# 保存结果
d.saveSvg('bitmap_filled_rect.svg')

二、矢量图(SVG)填充示例

方式1:直接在图案内绘制矢量图形

import drawSvg as draw

canvas_width, canvas_height = 200, 200
d = draw.Drawing(canvas_width, canvas_height, origin=(0, 0), displayInline=False)

# 1. 创建图案容器
vector_pattern = draw.Pattern(0, 0, 40, 40)
# 2. 在图案内绘制矢量元素(这里以圆形为例)
vector_shape = draw.Circle(20, 20, 15, fill='royalblue', stroke='white')
vector_pattern.append(vector_shape)

# 3. 创建填充矩形
rect = draw.Rectangle(0, 0, canvas_width, canvas_height, fill=vector_pattern, stroke='black')
d.append(rect)

d.saveSvg('vector_filled_rect.svg')

方式2:加载外部SVG文件作为填充图案

import drawSvg as draw

canvas_width, canvas_height = 200, 200
d = draw.Drawing(canvas_width, canvas_height, origin=(0, 0), displayInline=False)

# 1. 创建图案容器
external_svg_pattern = draw.Pattern(0, 0, 60, 60)
# 2. 读取外部SVG内容并嵌入图案
with open('external_vector.svg', 'r') as f:
    svg_content = f.read()
# 创建SVG元素并通过Use引用到图案中
svg_elem = draw.SvgElement(svg_content)
external_svg_pattern.append(draw.Use(svg_elem, 0, 0, 60, 60))

# 3. 创建填充矩形
rect = draw.Rectangle(0, 0, canvas_width, canvas_height, fill=external_svg_pattern, stroke='black')
d.append(rect)

d.saveSvg('external_svg_filled_rect.svg')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:40:36