如何在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
相关产品推荐
相关产品推荐

