SVGwrite:使用背景颜色导出到png / jpg并填充环形

时间:2014-05-30 15:42:17

标签: python svg

我使用svgwrite库编写了一些Python脚本。我现在想要用背景颜色导出我的图形,在我看来,我可能需要将它转换为另一种格式(png或jpg应该没问题)。我不太了解svg格式,但我确定它处理本机背景颜色。

另外,我画了两个共用同一个中心的圆圈,我想用特定的颜色填充它们之间的空间,就像画一个圆环一样,但我可以'在文档中找到如何操作。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

<强>背景

对于您的背景颜色,最简单的解决方案是只绘制一个填充整个文档的矩形。

<rect width="100%" height="100%" fill="red" />

还有其他方法可以做到这一点。 SVG 1.2定义了viewport-fill,但并非所有渲染器都支持它。在大多数浏览器上,background-color有效,但它可能无法在非浏览器SVG渲染器上运行。最简单的就是使用矩形。

<强>环空

我假设你的意思是你希望戒指内有一个透明孔?如果是这样,有几种方法可以做到这一点。直截了当的方法就是创建一个包含两个子路径的路径。一个用于外圈,一个用于内圈。当两个子路径重叠并且fill-rule属性设置为evenodd时,它会产生漏洞。

<path d="M -100,0
         A 100,100, 0,1,0, 100,0
         A 100,100, 0,1,0, -100,0
         M -75,0
         A 75,75, 0,1,0, 75,0
         A 75,75, 0,1,0, -75,0
         Z"
stroke="black" fill="orange" fill-rule="evenodd"/>

Demo here

有关fill-rule的更多信息,请访问:http://www.w3.org/TR/SVG/painting.html#FillRuleProperty

答案 1 :(得分:1)

这是创建带颜色的圆圈的示例。第一个圆圈具有填充颜色和单独的笔触颜色,因此它与两个圆圈相同,较小的圆圈位于顶部。第二个圆圈具有笔触颜色,但填充=“无”仅给出环形。最后一堆圆圈显示将一个圆圈放在同一个地方,另一个圆圈覆盖在下面的东西上。这可能是你想要的环境。

import svgwrite
def create_svg(name):
    SVG_SIZE = 900
    color_list = ["rgb(123, 80, 86)", "rgb(67, 130, 124)", "red"] 
    dwg = svgwrite.Drawing(name, (SVG_SIZE, SVG_SIZE), debug=True)
    # background will be white.
    dwg.add(dwg.rect(insert=(0, 0), size=('100%', '100%'), fill='white'))
    y = 50
    circle_1 = dwg.circle(center=(100, y), r=30, fill='green', 
            stroke='blue', stroke_width=5)
    dwg.add(circle_1)
    circle_2 = dwg.circle(center=(200, y), r=30, fill='none', 
            stroke='blue', stroke_width=5)
    dwg.add(circle_2)
    y += 300
    for i in range(3):
        circle_i = dwg.circle(center=(150, y), r=(100 - 30 * i), 
                fill=color_list[i], stroke='none', stroke_width=0)
        dwg.add(circle_i)
    dwg.save()
if __name__ == '__main__':
    create_svg('filling_annulus.svg')