You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SVG图片提取文本位置?以数字91为例(附Codepen演示)

提取SVG文本位置的方法

一、直接读取文本元素的基础坐标

SVG中的<text>标签自带x和y属性,这就是文本起始位置的绝对坐标。要找数字“91”的位置,先定位到它对应的<text>元素,直接读取这两个属性值即可。

二、计算相对画布的位置百分比

已知你的SVG画布尺寸是width="595.2pt"、height="841.92pt",把绝对坐标转换成相对百分比的公式很简单:

  • 水平相对占比:(文本x值 ÷ SVG宽度) × 100%
  • 垂直相对占比:(文本y值 ÷ SVG高度) × 100%

三、用JavaScript实现提取(适配你的演示逻辑)

在现有提取文本的代码基础上,扩展位置获取的逻辑就行:

// 遍历所有SVG文本元素
document.querySelectorAll('text').forEach(textEl => {
  const content = textEl.textContent.trim();
  // 定位目标数字"91"
  if (content === '91') {
    // 获取绝对坐标
    const x = parseFloat(textEl.getAttribute('x'));
    const y = parseFloat(textEl.getAttribute('y'));
    // 获取SVG画布尺寸
    const svgWidth = parseFloat(document.querySelector('svg').getAttribute('width'));
    const svgHeight = parseFloat(document.querySelector('svg').getAttribute('height'));
    
    // 计算相对位置
    const relativeX = ((x / svgWidth) * 100).toFixed(2) + '%';
    const relativeY = ((y / svgHeight) * 100).toFixed(2) + '%';
    
    console.log(`数字"91"绝对坐标:x=${x}pt,y=${y}pt`);
    console.log(`数字"91"相对位置:水平${relativeX},垂直${relativeY}`);
  }
});

四、额外注意点

  • 如果文本是用<tspan>嵌套在<text>里的,优先取外层<text>的x/y值;如果tspan有dx/dy偏移属性,要把偏移量加到基础坐标上。
  • SVG默认坐标原点在左上角,y值对应的是文本基线的位置,不是文本顶部,所以垂直相对位置是基于基线计算的。

内容的提问来源于stack exchange,提问作者Buzz Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:25:42