ChatGPT解决这个技术问题 Extra ChatGPT

用背景图像填充 SVG 路径元素

是否可以为 SVG <path> 元素设置 background-image

例如,如果我设置元素 class="wall",CSS 样式 .wall {fill: red;} 有效,但 .wall{background-image: url(wall.jpg)} 无效,.wall {background-color: red;} 也无效。

展示如何为 SVG 文本设置背景图片,可选择按字符设置:stackoverflow.com/a/10853878/405017
对于那些寻找更多深入信息的人,请查看这篇文章 link

R
Razin

您可以通过将背景设置为 pattern 来做到这一点:

<defs>
  <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
    <image href="wall.jpg" x="0" y="0" width="100" height="100" />
  </pattern>
</defs>

根据您的图像调整宽度和高度,然后从路径中引用它,如下所示:

<path d="M5,50
         l0,100 l100,0 l0,-100 l-100,0
         M215,100
         a50,50 0 1 1 -100,0 50,50 0 1 1 100,0
         M265,50
         l50,100 l-100,0 l50,-100
         z"
  fill="url(#img1)" />

Working example


非常好,这也适用于base64图像吗?而不是像普通 CSS 中的 data:image/png;base64,iVBORw0KGgoAA 之类的 wall.jpg?
@Christoph 我不知道,试试看。
@robertc 我试过但没用,但我有一个重复的样式元素。通过消除它,它工作得很好;)
@robertc:我对您的回答有疑问。图案从全局坐标 (0,0) 开始。是否可以让图案使用附着对象的局部坐标系?我想在我的 svg 的不同位置绘制一个矩形,发生的情况是,图案在孔背景中重复,并且对象被用作蒙版。
@robertc 请更新您的答案,以提及自 SVG 2 以来已弃用 xlink:href,现在只需使用 hrefdeveloper.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href