RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1027959
Accepted
MoloF
MoloF
Asked:2020-09-25 21:15:48 +0000 UTC2020-09-25 21:15:48 +0000 UTC 2020-09-25 21:15:48 +0000 UTC

SVG 将位图对象绑定到路径(path)

  • 772

我找不到有关将对象绑定到路径的信息。

我有以下 SVG 元素:

svg{
  width: 500px;
  height: 500px;
}
svg path{
  fill: none;
  stroke: red;
  stroke-width: 5px;
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
    <path id="curve" d="M64,287 C277,329 191,140 445,210" />
    <text style="font-size: 24px;">
        <textPath xlink:href="#curve" startOffset="50%" text-anchor="middle">test text</textPath>
    </text>
    <image href="https://img.icons8.com/ios-filled/50/000000/user-male-circle.png" rx=5 width="50px" height="50px">
        <animateMotion
            dur="5s"
            repeatCount="3"
            rotate="auto"
            restart="whenNotActive">
            <mpath xlink:href="#curve" />
        </animateMotion>
    </image>
</svg>

根据 SO 上的答案创建了我的科学怪人,在那里我找到了附加到路径和图片的文本,这些文本仅通过动画附加。

目标是简单地将图像对象绑定到文本等路径。但是谷歌搜索一个小时没有结果,因此我在这里问这个问题。

html
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Alexandr_TT
    2020-09-25T23:50:48Z2020-09-25T23:50:48Z

    要将图像附加到路径,您可以使用标记

    任何 SVG 形状都可以作为标记,包括任何位图。

     <marker id="User" viewBox="0 0 50 50" refX="0" refY="27"
            markerUnits="userSpaceOnUse"  orient="auto"
            markerWidth="50" markerHeight="50" > 
            <image href="https://isstatic.askoverflow.dev/76W3b.png"  width="50px" height="50px"/>
        </marker>   
    

    标记每行有三个着陆位置:

    marker-start, marker-mid,marker-end
    如果需要在行的中间放置一个标记,那么选择 -marker-mid还需要考虑到这个名称的标记放置在断点处,并且可能有几个。

    refX="0" refY="27" - 用于定位标记的属性path

    <style>
    svg{
      width: 500px;
      height: 500px;
    }
    svg path{
      fill: none;
      stroke: red;
      stroke-width: 5px;
    }
    </style>
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
      <defs>
        <marker id="User" viewBox="0 0 50 50" refX="0" refY="27"
            markerUnits="userSpaceOnUse"  orient="auto"
            markerWidth="50" markerHeight="50" > 
    		<image href="https://isstatic.askoverflow.dev/76W3b.png"  width="50px" height="50px"/>
    	</marker>	
      </defs>
        <path id="curve" d="M64 287C170.5 308 202.3 271.3 239.1 238 276 204.8 318 175 445 210" marker-mid="url(#User)" />
        <text dy="-5" style="font-size: 28px;">
            <textPath xlink:href="#curve" startOffset="40%" text-anchor="middle" >test</textPath>
        </text>
    	 <text dy="-5" style="font-size: 28px;">
            <textPath xlink:href="#curve" startOffset="65%" text-anchor="middle" >text</textPath>
        </text>
        
    </svg>

    • 假设背景中的红线不适合我们。

      您可以使标记复杂化并使图像不透明,为此我们将在背景中添加一个不透明的圆圈 <circle cx="25" cy="25" r="25" fill="white" />

    • 或者你需要增加图片的大小

      为此,请增加标记的区域:

      markerWidth="70" markerHeight="70"

    <style>
    svg{
      width: 500px;
      height: 500px;
    }
    svg path{
      fill: none;
      stroke: red;
      stroke-width: 5px;
    }
    </style>
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
      <defs>
        <marker id="User" viewBox="0 0 50 50" refX="0" refY="27"
            markerUnits="userSpaceOnUse"  orient="auto"
            markerWidth="70" markerHeight="70" > 
    		 <circle cx="25" cy="25" r="25" fill="white" />
    		<image href="https://isstatic.askoverflow.dev/76W3b.png"  width="50px" height="50px"/>
    	</marker>	
      </defs>
        <path id="curve" d="M64 287C170.5 308 202.3 271.3 239.1 238 276 204.8 318 175 445 210" marker-mid="url(#User)" />
        <text dy="-5" style="font-size: 28px;">
            <textPath xlink:href="#curve" startOffset="40%" text-anchor="middle" >test</textPath>
        </text>
    	 <text dy="-5" style="font-size: 28px;">
            <textPath xlink:href="#curve" startOffset="70%" text-anchor="middle" >text</textPath>
        </text>
        
    </svg>

    • 3
  2. Best Answer
    Stranger in the Q
    2020-09-25T21:23:01Z2020-09-25T21:23:01Z

    您可以在同一点创建关键点,会发生以下情况:

    svg{
      width: 500px;
      height: 500px;
    }
    svg path{
      fill: none;
      stroke: red;
      stroke-width: 5px;
    }
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 160 500 500">
        <path id="curve" d="M64,287 C277,329 191,140 445,210" />
        <text style="font-size: 24px;">
            <textPath xlink:href="#curve" startOffset="50%" text-anchor="middle">test text</textPath>
        </text>
        <image href="https://img.icons8.com/ios-filled/50/000000/user-male-circle.png" width="50px" height="50px" transform="translate(-25,-25)">
            <animateMotion calcMode="linear" keyPoints="0.5; 0.5" keyTimes="0; 1" rotate="auto">
                <mpath xlink:href="#curve" />
            </animateMotion>
        </image>
    </svg>

    PS:我也把图片往左上移了50%

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5