使用 SVG 过滤器向 SVG 图像元素添加边框 [重复]

Posted

技术标签:

【中文标题】使用 SVG 过滤器向 SVG 图像元素添加边框 [重复]【英文标题】:Adding a border to an SVG image element with SVG filters [duplicate] 【发布时间】:2022-01-21 09:15:30 【问题描述】:

我正在寻找一种使用 SVG 过滤器而不是 CSS 为 SVG 图像元素添加边框的方法,但我不知道如何。

该文件应该是独立的,即它不适用于网页。我在 Notepad++ 中工作,打算开发一个用于批处理的脚本,图像可能具有不同的大小,并且具有不同的纵横比。

虽然我可以读取图像尺寸并在顶部放置一个矩形,但我认为可以使用 SVG 过滤器,正如 developer.mozilla.org 所讨论的那样。

下面是 MWE。

<svg
   
   
   viewBox="0 0 210 297"
   version="1.1"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg">


  <defs>
    <filter id="image">
      <feImage xlink:href="abstract.jpg"/>
    </filter>
  </defs>


<rect   fill="DodgerBlue" />

  <rect x="10mm" y="10mm"  
      style="filter:url(#image);"/>

</svg>

MWE 中的示例图像,

图片来自Pexels,来自Pixabay

【问题讨论】:

【参考方案1】:

您可以将图像添加到&lt;image&gt; 标记中并对其应用过滤器。在这个例子中,我放置了x="1"y="1" 以使图像与边缘保持距离,因为它可以切断图像与 SVG 边缘齐平的滤镜效果。

<svg viewBox="0 0 210 297" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">

  <filter id="outline">
    <feMorphology in="SourceAlpha" result="expanded" operator="dilate" radius="1"/>
    <feFlood flood-color="black"/>
    <feComposite in2="expanded" operator="in"/>
    <feComposite in="SourceGraphic"/>
  </filter>
  <image filter="url(#outline)" href="https://i.stack.imgur.com/cJwpE.jpg"   x="1" y="1"/>
</svg>

添加边框的技术取自 CSS Tricks 的 this 文章。

【讨论】:

以上是关于使用 SVG 过滤器向 SVG 图像元素添加边框 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 SVG 矩形作为具有可变高度的 HTML 元素的边框

SVG过滤器使用feImage作为feDisplacementMap的输入[关闭]

制作带有css边框的SVG图标作为一个元素

裁剪 SVG 的正确方法?

CSS和创建svg图形的边框

向 SVG 元素添加斜面和浮雕?