SVG:使用路径元素创建带有“孔”的区域

2024-03-03

我正在尝试使用 SVG 路径元素来定义带有“孔”的区域。我想使用这些区域来突出显示图像中的某些文本单词。

我的目标是展示使用 OCR 从图像中提取文本的结果(谷歌云视觉API https://cloud.google.com/vision/)。结果将以表格的形式显示在我的 Angular 应用程序中,其中包含提取文本中的单词,并且能够突出显示/显示用户图像中选定的单词。

使用 OCR,我获得了提取文​​本中每个单词的边界框。

这就是我解决突出显示的方法:

<svg height="300" width="300">
  <image xlink:href="http://www.downloadclipart.net/thumb/17283-ok-icon-vector-thumb.png" x="0" y="0" height="300" width="300"/>
  <path fill="#ddd" opacity="0.7" fill-rule="evenodd" d="M0 0 H300 V300 H0 Z M10 10 H100 V100 H10 Z" style="visibility:visible"/>
  <path fill="#ddd" opacity="0.7" fill-rule="evenodd" d="M0 0 H300 V300 H0 Z M150 150 H200 V200 H150 Z" style="visibility:hidden"/>
</svg>

一切正常。我只遇到重叠边界框的问题。我有一个实用程序,可以将图像宽度和高度以及边界框转换为路径元素的“d”属性。

public static String example(int width, int height, List<Box> boxes) {

    StringBuilder sb = new StringBuilder("M0 0")
            .append(" H").append(width)
            .append(" V").append(height)
            .append(" H0 Z");

    boxes.forEach((box) -> {
        sb.append(" M").append(box.getLeft())
                .append(" ").append(box.getTop())
                .append(" H").append(box.getRight())
                .append(" V").append(box.getBottom())
                .append(" H").append(box.getLeft())
                .append(" Z");
    });

    return sb.toString();
}

但如果盒子重叠,我会得到这样的结果

<svg height="200" width="200">
  <path fill="red" fill-rule="evenodd" d="M0 0 H200 V200 H0 Z M40 40 H100 V100 H40 Z M10 10 H50 V50 H10 Z" />
</svg>

我想要这个

我的问题是是否有更好的方法来定义 SVG 路径元素以获得我想要的结果。


用这样的面膜...

路径形成洞。

<svg height="200" width="200">
  <image xlink:href="http://www.downloadclipart.net/thumb/17283-ok-icon-vector-thumb.png" height="200" width="200"/>
  <path fill="black" opacity="0.5" fill-rule="evenodd" d="M0 0 H200 V200 H0 Z M50 50 H100 V100 H50 Z M80 80 H150 V150 H80 Z" />
</svg>

<br>

<svg width="200" height="200">
  <defs>
    <mask id="Mask" maskContentUnits="userSpaceOnUse">
      <rect width="200" height="200" fill="white" opacity="0.5"/>
      <path d="M50 50 H100 V100 H50 Z M80 80 H150 V150 H80 Z" />
    </mask>
  </defs>
  <image xlink:href="http://www.downloadclipart.net/thumb/17283-ok-icon-vector-thumb.png" height="200" width="200"/>
  <rect width="200" height="200" mask="url(#Mask)" />
</svg>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVG:使用路径元素创建带有“孔”的区域 的相关文章

  • 如何缩放 SVG 路径以适应窗口大小?

    我在缩放 SVG 以适应窗口大小时遇到 了麻烦 在这个例子中 我有一个波浪路径和一个文本元素 我想在这里实现的是沿着波浪路径从左到右移动文本元素 这是由GSAP完成的 并停在路径的中间在初始负载下 当用户开始滚动时 它将移至末尾 我的问题是
  • 裁剪 SVG 的正确方法?

    我对 SVG 图像完全感到困惑 我想将图像裁剪为其核心内容 我想通过指定其视图框和 或视口和 或其他任何内容来裁剪它 除非我不想更改折线元素中的任何点 图像按原样呈现类似这样的内容 注意 边框仅用于说明目的 边框实际上并不是 SVG 的一部
  • Dimple.js - 将数据标签添加到条形图的每个条形

    我使用的是dimple js 它基于d3 js 是否可以向本示例中提到的条形图的每个条形添加数据标签http dimplejs org examples viewer html id bars vertical http dimplejs
  • SVG 坐标与变换矩阵

    我想在矩形元素上实现像 svg edit 这样的功能 旋转矩形 调整大小 Drag 旋转 SVG 矩形效果很好 但是当我想调整矩形大小时 它就会出现问题 坐标不正确 我使用变换矩阵来旋转targetelement setAttribute
  • 当我“显示:无”一个 SVG 时,另一个(独立的)SVG 会以不同的方式呈现

    我已经伤透了几个小时了 这没有任何意义 我将遇到的问题减少到这个codepen https codepen io Octopous pen OJORpJQ https codepen io Octopous pen OJORpJQ HTML
  • 使用样式组件更改 SVG 描边的颜色

    我有一个 SVG 用作 img 标签 使用样式组件 我试图达到在悬停时更改描边颜色的程度 我导入了 SVG import BurgerOpenSvg from images burger open svg 我为它创建了一个样式组件 cons
  • 跨浏览器 SVG keepAspectRatio

    我正在尝试有一个SVG里面的图形 img 适合 不裁剪 标签内部且保留宽高比的标签 我创建了SVG在 Inkscape 中 它在所有浏览器上都按预期工作 除了互联网浏览器 9 为了让它发挥作用IE 9我必须添加viewBox 0 0 580
  • 使用 jQuery 更改 SVG 元素的“xlink:href”属性

    我正在尝试使用单击事件更改 xlink href 属性 到目前为止它部分有效 这就是我正在做的 HTML a href class ui btn ui corner all ui shadow editIcon style text ali
  • 使用 inkscape 命令行将 svg 转换为 png 失败

    我觉得我一定做了一些愚蠢的错误 但我就是无法让它发挥作用 这是我从 cmd 运行的命令 inkscape com C path ship svg e export png C Path ship png without gui 作为回报 我
  • 在 GTK3 中从 Python 中的 SVG 源绘制 SVG 图像

    我可以在 PyQt 中轻松做到这一点 如下所示 img
  • svg路径指针事件-点击检测

    我正在编写一些 HTML 以便可以使用 HTML SVG 和 PATH 标签绘制贝塞尔曲线 我的曲线效果非常好 现在我想添加一项功能 如果用户将鼠标悬停在曲线上 我会更改颜色 但实际情况是 SVG 创建了一个包含路径的大框 并捕获所有点击
  • 具有宽度/高度的 SVG 在 IE9/10/11 上无法缩放

    IE 9 10 11 存在一个已知问题 如果您有一个 SVG 文件
  • 将 SVG 多边形转换为路径

    我有一个相当大的行政分区 SVG 文件 需要在 Raphael JS 中使用 它有 600 个多边形 重量为 1 2 Mb 现在 我需要将这些多边形转换为路径 以便它在 Raphael 中工作 最棒的多路径工具 http aautar di
  • 如何在 d3.js 中的节点上制作双击事件?

    我想在节点上进行双击事件 所以我尝试了 on dbclick function d return http google com and bind dbclick function d alert hello 但一切都失败了 谁能帮我 完整
  • 如何将transform-origin与SVG结合使用? [复制]

    这个问题在这里已经有答案了 我正在尝试旋转SVG path从它的中心但它不工作 a width 40px height 40px width 40px font size 1 5rem padding 1px overflow hidden
  • 可以在 d3.js 中使用具有固定圆圈大小的圆圈包布局吗?

    此圆形包布局示例 http bl ocks org 4063269 http bl ocks org 4063269 非常适合我正在从事的项目 但是它会调整所有圆圈相对于彼此的大小 有没有一种简单的方法来指定每个圆的固定半径 我已经搜索了源
  • 文本输入框作为 SVG 中的“foreignObject” - 文本溢出问题

    我使用 foreignObject 标签在 svg 中有一个文本输入框 这很有效 但是如果您在输入框中输入的内容比其宽度长 从而导致其溢出 那么文本实际上会出现在页面上的其他位置 可能是没有外来对象标记的默认位置 这是一些屏幕截图来解释正在
  • 渲染时 Flutter SVG 延迟

    我在行中显示 SVG 文件形式的图像和文本 由于某些原因 svg 图像的渲染速度比屏幕的其余部分慢 从而导致延迟 这不利于用户体验 这种延迟正常吗 我该怎么做才能使整个屏幕同时渲染 Row mainAxisAlignment MainAxi
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • SVG 到 Android 形状 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐