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

如何实现SVG路径变形圆形图片的动画效果?

如何实现这类SVG变形动画?

你提供的示例是基于SVG裁剪路径(clipPath)的图片变形效果——通过动态修改裁剪路径的形状,让被裁剪的图片呈现出“变形”的视觉效果。以下是具体实现方法:

核心原理

用SVG的<clipPath>定义一个不规则裁剪区域,将图片放入被该裁剪路径约束的<g>元素中,然后通过动画修改<clipPath>内部<path>的d属性(路径指令),让裁剪区域的形状平滑过渡,最终呈现图片跟着路径变形的效果。

具体实现步骤

1. 搭建基础SVG结构

保留你提供的基础结构,核心是clipPath和被裁剪的图片:

<div class="polymorphing">
  <svg viewBox="0 0 200 200" height="600" width="600" xmlns="http://www.w3.org/2000/svg">
    <!-- 裁剪路径 -->
    <clipPath id="myClip">
      <path fill="#FF0066"
        d="M42.3,-45.7C56.3,-38.7,70.1,-26.8,73.3,-12.4C76.5,2,69.1,18.8,58.1,29.6C47.1,40.4,32.7,45.1,17.7,51.9C2.8,58.7,-12.5,67.6,-28.1,66.5C-43.7,65.4,-59.5,54.5,-69.8,39.1C-80.2,23.7,-85.1,3.9,-80.7,-13.1C-76.4,-30.2,-62.9,-44.5,-47.9,-51.3C-32.9,-58.1,-16.4,-57.5,-1.1,-56.1C14.2,-54.8,28.4,-52.7,42.3,-45.7Z"
        transform="translate(100 100)" />
    </clipPath>

    <!-- 被裁剪的图片 -->
    <g clip-path="url(#myClip)">
      <image class="morph-image"
        href="https://theplusaddons.com/wp-content/uploads/2019/04/digitalagency3.jpg" x="0" y="0"
        height="100%" width="100%">
      </image>
    </g>
  </svg>
</div>

2. 添加变形动画

要实现动画,你需要至少两个点数一致的路径,然后通过SVG原生动画或CSS/JS来切换路径的d属性:

方法1:SVG原生<animate>动画

直接在<path>内添加<animate>元素,实现自动循环变形:

<path fill="#FF0066"
  d="M42.3,-45.7C56.3,-38.7,70.1,-26.8,73.3,-12.4C76.5,2,69.1,18.8,58.1,29.6C47.1,40.4,32.7,45.1,17.7,51.9C2.8,58.7,-12.5,67.6,-28.1,66.5C-43.7,65.4,-59.5,54.5,-69.8,39.1C-80.2,23.7,-85.1,3.9,-80.7,-13.1C-76.4,-30.2,-62.9,-44.5,-47.9,-51.3C-32.9,-58.1,-16.4,-57.5,-1.1,-56.1C14.2,-54.8,28.4,-52.7,42.3,-45.7Z"
  transform="translate(100 100)">
  <!-- 添加变形动画,to是目标路径,要和原路径点数一致 -->
  <animate
    attributeName="d"
    dur="8s"
    repeatCount="indefinite"
    values="
      M42.3,-45.7C56.3,-38.7,70.1,-26.8,73.3,-12.4C76.5,2,69.1,18.8,58.1,29.6C47.1,40.4,32.7,45.1,17.7,51.9C2.8,58.7,-12.5,67.6,-28.1,66.5C-43.7,65.4,-59.5,54.5,-69.8,39.1C-80.2,23.7,-85.1,3.9,-80.7,-13.1C-76.4,-30.2,-62.9,-44.5,-47.9,-51.3C-32.9,-58.1,-16.4,-57.5,-1.1,-56.1C14.2,-54.8,28.4,-52.7,42.3,-45.7Z;
      M38.2,-49.5C52.6,-41.6,67.3,-28.3,70.9,-12.8C74.5,2.7,67,19.9,55.3,30.5C43.6,41.1,27.7,45.1,11.9,50.9C-3.9,56.6,-19.9,64.2,-35.1,61.1C-50.3,58,-64.7,44.1,-72.9,27.9C-81.1,11.7,-83.1,-6.2,-76.7,-22.2C-70.3,-38.2,-55.5,-53.3,-39.6,-58.8C-23.6,-64.3,-6.8,-60.2,9.9,-56.6C26.7,-53,52.9,-49.9,38.2,-49.5Z;
      M42.3,-45.7C56.3,-38.7,70.1,-26.8,73.3,-12.4C76.5,2,69.1,18.8,58.1,29.6C47.1,40.4,32.7,45.1,17.7,51.9C2.8,58.7,-12.5,67.6,-28.1,66.5C-43.7,65.4,-59.5,54.5,-69.8,39.1C-80.2,23.7,-85.1,3.9,-80.7,-13.1C-76.4,-30.2,-62.9,-44.5,-47.9,-51.3C-32.9,-58.1,-16.4,-57.5,-1.1,-56.1C14.2,-54.8,28.4,-52.7,42.3,-45.7Z;
    "
    keyTimes="0;0.5;1"
    calcMode="spline"
    keySplines="0.42 0 0.58 1;0.42 0 0.58 1"
  />
</path>

方法2:CSS动画控制

通过CSS变量定义路径,用@keyframes切换变量值:

.polymorphing path {
  --path-1: "M42.3,-45.7C56.3,-38.7,70.1,-26.8,73.3,-12.4C76.5,2,69.1,18.8,58.1,29.6C47.1,40.4,32.7,45.1,17.7,51.9C2.8,58.7,-12.5,67.6,-28.1,66.5C-43.7,65.4,-59.5,54.5,-69.8,39.1C-80.2,23.7,-85.1,3.9,-80.7,-13.1C-76.4,-30.2,-62.9,-44.5,-47.9,-51.3C-32.9,-58.1,-16.4,-57.5,-1.1,-56.1C14.2,-54.8,28.4,-52.7,42.3,-45.7Z";
  --path-2: "M38.2,-49.5C52.6,-41.6,67.3,-28.3,70.9,-12.8C74.5,2.7,67,19.9,55.3,30.5C43.6,41.1,27.7,45.1,11.9,50.9C-3.9,56.6,-19.9,64.2,-35.1,61.1C-50.3,58,-64.7,44.1,-72.9,27.9C-81.1,11.7,-83.1,-6.2,-76.7,-22.2C-70.3,-38.2,-55.5,-53.3,-39.6,-58.8C-23.6,-64.3,-6.8,-60.2,9.9,-56.6C26.7,-53,52.9,-49.9,38.2,-49.5Z";
  d: path(var(--path-1));
  animation: morph 8s infinite alternate ease-in-out;
}

@keyframes morph {
  0% {
    d: path(var(--path-1));
  }
  100% {
    d: path(var(--path-2));
  }
}

3. 关键注意事项

  • 路径点数必须一致:不同变形路径的d属性中,指令数量和类型(比如C、M等)要完全匹配,否则动画会出现扭曲错乱。可以用不规则路径生成工具创建同点数的路径。
  • 动画平滑度:使用calcMode="spline"(SVG)或ease-in-out(CSS)来让过渡更自然。
  • 交互触发:如果需要滚动、hover触发动画,可以用JavaScript监听事件,动态修改路径的d属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:01:15