gpt4 book ai didi

python - 如何使用 Python 的 svgwrite 模块应用 alpha 掩码?

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:18 27 4
gpt4 key购买 nike

我正在使用 svgwrite模块以编程方式为项目创建一些图像。我需要使用 alpha 蒙版来创建渐变透明元素。我不清楚创建蒙版后如何应用蒙版。

在下面的示例中,我尝试使用圆形渐变在原本为灰色的正方形中创建渐变透明环。我可以创造广场;我可以分别创建圆形渐变 def 和一个用它填充的圆。

将一个应用到另一个作为面具我不明白。

def my_mask():
# define some params
width = "500px"
height = "500px"
radius = "50%"
black = "rgb(255, 255, 255)"
grey = "rgb(127,127,127)"

# create the drawing surface
canvas = svgwrite.Drawing('temp_mask.svg', (width, height))

# create defs, in this case, just a single gradient
rad_grad = canvas.radialGradient(("50%", "50%"), "50%", ("50%", "50%"), id="rad_grad")
rad_grad.add_stop_color("0%", black, 0)
rad_grad.add_stop_color("66.6%", black, 255)
rad_grad.add_stop_color("100%", black, 255)

# now to draw; first I create the rect object to be masked
base_rect = canvas.rect( (0, 0), (width, height), id="masked_rect").fill(grey)
canvas.add(base)

# and according to the docs, any SVG fragment can be an alpha mask, so I create this circle
mask_element = canvas.circle((radius, radius), radius, fill="url(#rad_grad)")

# but here's where I get confused; I don't get how this function actually makes use of one element to mask another
canvas.mask((0, 0), (width, height))

# No problem exporting to a file, though. :)
canvas.save()

这就是我所追求的(刚刚添加红叉以展示透明度);使用 Sketch 轻松完成 Example of desired effect

最佳答案

谢谢乔琳! ClipPath 和 Mask 的 svgwrite“示例”并未实际向您展示如何将其应用于绘图。为了完整起见,我用你的方法为 ClipPath 写了一个真实的例子:

clip_path = dwg.defs.add(dwg.clipPath(id='my_clip_path1')) #name the clip path
clip_path.add(dwg.circle((5*mm, 5*mm), 10*mm)) #things inside this shape will be drawn
testCircle = dwg.add(dwg.g(id='test', stroke='red', stroke_width=1, fill='black', fill_opacity=1, clip_path="url(#my_clip_path1)"))
testCircle.add(dwg.circle((5*mm, 10*mm), 10*mm))

Result of this code

关于python - 如何使用 Python 的 svgwrite 模块应用 alpha 掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com