Skip to content

SVG 修改指南

SVG (Scalable Vector Graphics) 是一种基于 XML 的矢量图形格式。这意味着你可以像编辑代码一样编辑图片,也可以使用图形化工具进行调整。

以下是几种常见的修改 SVG 的方法,按便捷程度排序。

1. 使用代码编辑器 (VS Code) - 最快,适合微调

如果你只需要修改颜色线条粗细简单的尺寸,直接在 VS Code 中打开 .svg 文件是最快的方法。

核心属性说明

SVG 文件本质上是文本。你通常会看到类似这样的标签:

xml
<svg width="32" height="32" viewBox="0 0 200 200" ...>
  <path d="..." fill="#16a34a" stroke="black" stroke-width="5" />
  <rect x="10" y="10" width="180" height="180" ... />
</svg>
  • fill: 填充颜色。可以是颜色代码(如 #FF0000)、颜色名称(如 red)或 none(无填充)。
  • stroke: 描边颜色。
  • stroke-width: 描边线条的粗细。
  • opacity: 透明度 (0.0 到 1.0)。
  • width / height: 矩形 (rect) 或圆 (circle) 的尺寸。
  • viewBox: 画布的视口坐标系。通常不需要动,除非你要裁剪图片。

示例:修改颜色

找到 fill="..."stroke="...",直接替换颜色代码即可。

diff
- <path fill="#000000" ... />
+ <path fill="#FF5733" ... />

2. 使用在线矢量编辑器 - 适合形状调整

如果你需要拖拽形状、旋转、缩放或组合图形,在线工具非常方便,无需安装软件。

推荐工具

  1. Figma (推荐)

    • 优点: 界面现代,功能强大,免费版足够使用。
    • 操作:
      1. 将 SVG 文件拖入 Figma。
      2. 双击图形进入编辑模式,可以拖动锚点修改形状。
      3. 在右侧属性面板修改颜色 (Fill/Stroke)。
      4. 选中 Frame,右键 -> Copy/Paste as -> Copy as SVG,或者点击 Export 导出。
  2. Boxy SVG

    • 优点: 专注于 SVG 编辑,生成的代码非常干净。
    • 操作: 直接打开 SVG 文件,像画图软件一样编辑,保存即可。
  3. SVGViewer

    • 优点: 左边代码,右边预览,适合一边改代码一边看效果。

3. 使用桌面专业软件 - 适合复杂设计

如果你需要从头设计复杂的 Logo 或插画。

  1. Inkscape (免费开源)
    • 功能对标 Illustrator,完全免费。支持所有 SVG 特性。
  2. Adobe Illustrator (付费)
    • 行业标准,功能最强。

4. 使用 AI 辅助 (如 ChatGPT / Claude)

如果你不知道具体的代码怎么写,可以让 AI 帮你改。

提示词技巧 (Prompting)

把 SVG 代码复制给 AI,并清楚地描述你的需求:

"这是我的 SVG 代码:[粘贴代码] 请帮我做以下修改:

  1. 把背景的圆角矩形改成正方形。
  2. 把所有绿色的地方改成蓝色 (#0000FF)。
  3. 让线条稍微细一点。"

关键点

  • 提供上下文: 总是先把当前的 SVG 代码发给 AI。
  • 描述几何形状: 使用“正方形”、“圆形”、“居中”、“放大”等几何术语。

总结:我该用哪种?

  • 改颜色/粗细 -> VS Code (直接改代码)
  • 微调形状/布局 -> Figma (可视化拖拽)
  • 复杂设计 -> Inkscape / Illustrator
  • 不想动手 -> AI (描述需求)

5. 进阶:SVG 动画

SVG 不仅仅是静态图片,它完全支持动画!你可以让图标旋转、跳动或变色。

方法 A:CSS 动画 (推荐)

就像给 HTML 元素加动画一样,你可以给 SVG 内部的标签加 class,然后写 CSS。

示例:让图标旋转

xml
<svg ...>
  <style>
    @keyframes spin {
      100% { transform: rotate(360deg); }
    }
    .loading-icon {
      animation: spin 2s linear infinite;
      transform-origin: center; /* 确保围绕中心旋转 */
    }
  </style>
  <!-- 给需要旋转的部分加上 class -->
  <path class="loading-icon" d="..." />
</svg>

方法 B:SMIL 动画 (SVG 原生)

直接在 SVG 标签内部写 <animate> 标签。这种方式不需要 CSS,文件自包含动画。

示例:呼吸灯效果 (透明度变化)

xml
<circle cx="50" cy="50" r="40" fill="red">
  <!-- 改变 opacity 属性,从 1 到 0.5 再到 1,循环播放 -->
  <animate 
    attributeName="opacity" 
    values="1;0.5;1" 
    dur="2s" 
    repeatCount="indefinite" 
  />
</circle>

示例:变形动画 (路径变化)

xml
<path fill="#16a34a">
  <!-- 改变 d 属性 (路径形状) -->
  <animate 
    attributeName="d" 
    values="M10 10 L90 10 L50 90 Z; M10 10 L90 10 L90 90 Z; M10 10 L90 10 L50 90 Z" 
    dur="3s" 
    repeatCount="indefinite" 
  />
</path>

哪种更好?

  • CSS 动画: 适合简单的旋转、位移、缩放。前端开发者最熟悉。
  • SMIL 动画: 适合复杂的路径变形 (d 属性变化) 或属性变化。文件独立性好(直接把 SVG 发给别人,动画还在)。

Released under the MIT License.