downloading-figma-assets

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Figmaアセットダウンロード

Figma资源下载

FigmaデザインからPNG画像、SVGアイコン、その他のビジュアルアセットを抽出・ダウンロードする手順。
从Figma设计稿中提取并下载PNG图片、SVG图标及其他视觉资源的步骤。

目次

目录

Workflow

Workflow

Copy this checklist:
Asset Download Progress:
- [ ] Step 1: アセットタイプを特定
- [ ] Step 2: 取得方法を選択
- [ ] Step 3: アセットをダウンロード
- [ ] Step 4: SVG後処理(必要な場合)
- [ ] Step 5: 出力を確認
Step 1: アセットタイプを特定
タイプ推奨方法
アイコン(SVG)※HTMLに
data-figma-icon-svg
あり
Figma API(方法2)★優先
アイコン(SVG)※
data-figma-asset-url
あり
MCP経由(方法1)
写真・画像MCP経由(方法1)
イラストFigma API(方法2)
スクリーンショットスクリプト(方法3)
⚠️ 重要:
data-figma-icon-svg
には親ノードIDが指定されている場合があります。 複数のSVGパーツを1つのアイコンとしてダウンロードするため、Figma APIでの取得を優先してください。
Step 2: 取得方法を選択
  • 方法2(優先): Figma API -
    data-figma-icon-svg
    属性がある場合
  • 方法1: MCP経由 -
    data-figma-asset-url
    属性がある場合
  • 方法3: スクリーンショット - 特定ビューが必要な場合
Step 3-5: 選択した方法のセクションに従って実行
If SVG icons appear white on white background, proceed to SVGの後処理.
复制以下检查清单:
Asset Download Progress:
- [ ] Step 1: 确定资源类型
- [ ] Step 2: 选择获取方法
- [ ] Step 3: 下载资源
- [ ] Step 4: SVG后期处理(如有需要)
- [ ] Step 5: 确认输出结果
Step 1: 确定资源类型
类型推荐方法
图标(SVG)※HTML中包含
data-figma-icon-svg
Figma API(方法2)★优先
图标(SVG)※包含
data-figma-asset-url
通过MCP(方法1)
照片/图片通过MCP(方法1)
插画Figma API(方法2)
截图脚本(方法3)
⚠️ 重要:
data-figma-icon-svg
中可能指定了父节点ID。 为了将多个SVG部件作为一个图标下载,请优先使用Figma API获取。
Step 2: 选择获取方法
  • 方法2(优先): Figma API - 存在
    data-figma-icon-svg
    属性时
  • 方法1: 通过MCP - 存在
    data-figma-asset-url
    属性时
  • 方法3: 截图 - 需要特定视图时
Step 3-5: 按照所选方法的章节执行
如果SVG图标在白色背景上显示为白色,请前往SVG后期处理

前提条件

前提条件

  • Figma MCP接続が有効
  • FIGMA_TOKEN(API経由でエクスポートする場合)
  • Figma MCP连接已启用
  • FIGMA_TOKEN(通过API导出时需要)

方法1: MCP経由でアセットURL取得(推奨)

方法1:通过MCP获取资源URL(推荐)

Step 1: デザインコンテキスト取得

Step 1: 获取设计上下文

bash
mcp__figma__get_design_context(fileKey, nodeId, clientLanguages="html,css")
bash
mcp__figma__get_design_context(fileKey, nodeId, clientLanguages="html,css")

Step 2: アセットURLの抽出

Step 2: 提取资源URL

レスポンスから
https://www.figma.com/api/mcp/asset/
で始まるURLを抽出:
javascript
// レスポンス例
const imgHome = "https://www.figma.com/api/mcp/asset/4e601326-51bf-43b1-aa59-a0273109c3db";
const imgNotification = "https://www.figma.com/api/mcp/asset/d10837ed-2c6c-4dcd-96c4-b0b9e39efb79";
从响应中提取以
https://www.figma.com/api/mcp/asset/
开头的URL:
javascript
// 响应示例
const imgHome = "https://www.figma.com/api/mcp/asset/4e601326-51bf-43b1-aa59-a0273109c3db";
const imgNotification = "https://www.figma.com/api/mcp/asset/d10837ed-2c6c-4dcd-96c4-b0b9e39efb79";

Step 3: ダウンロードスクリプト

Step 3: 下载脚本

javascript
const https = require('https');
const fs = require('fs');
const path = require('path');

const assets = {
  'icon-name': 'https://www.figma.com/api/mcp/asset/xxxxx',
  // 他のアセット
};

const outDir = './icons';

function download(name, url) {
  return new Promise((resolve, reject) => {
    const file = fs.createWriteStream(path.join(outDir, name + '.svg'));
    https.get(url, (res) => {
      if (res.statusCode === 302 || res.statusCode === 301) {
        download(name, res.headers.location).then(resolve).catch(reject);
        return;
      }
      res.pipe(file);
      file.on('finish', () => { file.close(); resolve(); });
    }).on('error', reject);
  });
}

async function main() {
  fs.mkdirSync(outDir, { recursive: true });
  for (const [name, url] of Object.entries(assets)) {
    await download(name, url);
    console.log('Downloaded:', name);
  }
}

main();
注意: MCPアセットURLは実際にはSVG形式で返されることが多い(拡張子に関わらず)。
javascript
const https = require('https');
const fs = require('fs');
const path = require('path');

const assets = {
  'icon-name': 'https://www.figma.com/api/mcp/asset/xxxxx',
  // 其他资源
};

const outDir = './icons';

function download(name, url) {
  return new Promise((resolve, reject) => {
    const file = fs.createWriteStream(path.join(outDir, name + '.svg'));
    https.get(url, (res) => {
      if (res.statusCode === 302 || res.statusCode === 301) {
        download(name, res.headers.location).then(resolve).catch(reject);
        return;
      }
      res.pipe(file);
      file.on('finish', () => { file.close(); resolve(); });
    }).on('error', reject);
  });
}

async function main() {
  fs.mkdirSync(outDir, { recursive: true });
  for (const [name, url] of Object.entries(assets)) {
    await download(name, url);
    console.log('已下载:', name);
  }
}

main();
注意: MCP资源URL通常会返回SVG格式(与扩展名无关)。

方法2: Figma API経由でSVGエクスポート(★アイコン推奨)

方法2:通过Figma API导出SVG(★图标推荐)

この方法を優先する理由:
  • data-figma-icon-svg
    には親ノードIDが指定されている場合がある
  • 親ノードを指定することで、複数のSVGパーツを1つのアイコンとして取得可能
  • Figma APIは指定ノード配下の全要素を含むSVGを返す
优先使用此方法的原因:
  • data-figma-icon-svg
    中可能指定了父节点ID
  • 指定父节点可以将多个SVG部件作为一个图标获取
  • Figma API会返回包含指定节点下所有元素的SVG

Step 1: ノードIDの特定

Step 1: 确定节点ID

HTMLから抽出する場合(推奨):
HTMLの
data-figma-icon-svg
属性にはノードIDが格納されている:
html
<!-- 単一ノードの例 -->
<span class="icon" data-figma-icon-svg="3428:18627" data-figma-node="3428:18627"></span>

<!-- 親ノードが指定されている例(複数パーツで構成されるアイコン) -->
<div class="icon-container" 
     data-figma-node="2348:3191" 
     data-figma-icon-svg="2348:3191">
  <!-- 内部に複数のSVG要素が含まれる -->
</div>
bash
undefined
从HTML中提取(推荐):
HTML的
data-figma-icon-svg
属性中存储了节点ID:
html
<!-- 单个节点示例 -->
<span class="icon" data-figma-icon-svg="3428:18627" data-figma-node="3428:18627"></span>

<!-- 指定父节点的示例(由多个部件组成的图标) -->
<div class="icon-container" 
     data-figma-node="2348:3191" 
     data-figma-icon-svg="2348:3191">
  <!-- 内部包含多个SVG元素 -->
</div>
bash
undefined

HTMLからノードIDを抽出

从HTML中提取节点ID

grep -oP 'data-figma-icon-svg="\K[^"]+' dashboard.html | sort -u
grep -oP 'data-figma-icon-svg="\K[^"]+' dashboard.html | sort -u

出力: 3428:18627, 491:2101, 2348:3191, ...

输出: 3428:18627, 491:2101, 2348:3191, ...


**Figma MCPから取得する場合:**

```bash
mcp__figma__get_metadata(fileKey, nodeId)

**从Figma MCP获取:**

```bash
mcp__figma__get_metadata(fileKey, nodeId)

Step 2: SVGエクスポートAPI呼び出し

Step 2: 调用SVG导出API

javascript
const https = require('https');

const TOKEN = process.env.FIGMA_TOKEN;
const FILE_KEY = 'your-file-key';
const NODE_IDS = '123:456,789:012'; // カンマ区切り

const url = `https://api.figma.com/v1/images/${FILE_KEY}?ids=${encodeURIComponent(NODE_IDS)}&format=svg`;

https.get(url, { headers: { 'X-Figma-Token': TOKEN } }, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    const response = JSON.parse(data);
    console.log(response.images);
    // { "123:456": "https://...", "789:012": "https://..." }
  });
});
注意: インスタンスノードやラスター画像を含むノードは
null
が返される場合がある。
javascript
const https = require('https');

const TOKEN = process.env.FIGMA_TOKEN;
const FILE_KEY = 'your-file-key';
const NODE_IDS = '123:456,789:012'; // 逗号分隔

const url = `https://api.figma.com/v1/images/${FILE_KEY}?ids=${encodeURIComponent(NODE_IDS)}&format=svg`;

https.get(url, { headers: { 'X-Figma-Token': TOKEN } }, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    const response = JSON.parse(data);
    console.log(response.images);
    // { "123:456": "https://...", "789:012": "https://..." }
  });
});
注意: 包含实例节点或光栅图像的节点可能会返回
null

方法3: スクリーンショットスクリプト

方法3:截图脚本

~/.agents/scripts/html-screenshot/figma-screenshot.js
を使用:
bash
node figma-screenshot.js --file-key=xxx --node-id=123:456 --token=$FIGMA_TOKEN output.png
使用
~/.agents/scripts/html-screenshot/figma-screenshot.js
bash
node figma-screenshot.js --file-key=xxx --node-id=123:456 --token=$FIGMA_TOKEN output.png

SVGの後処理

SVG后期处理

Figmaからエクスポートされたアイコンには複数の問題が含まれることがある。
从Figma导出的图标可能存在多个问题。

問題1: アスペクト比の崩れ(⚠️ 重要)

问题1:宽高比失真(⚠️ 重要)

症状: アイコンが引き伸ばされて歪む
原因: Figma APIが以下の属性を含むSVGを返す:
xml
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" ...>
問題の属性影響
preserveAspectRatio="none"
アスペクト比を無視して引き伸ばす
width="100%" height="100%"
親コンテナに合わせて伸縮
解決: 固定サイズに修正
bash
cd icons/
for f in *.svg; do
  # preserveAspectRatio="none" を削除
  sed -i '' 's/ preserveAspectRatio="none"//g' "$f"
  # width="100%" height="100%" を viewBox から計算した値に置換
  # 例: viewBox="0 0 20 20" → width="20" height="20"
  sed -i '' 's/ width="100%" height="100%"//g' "$f"
  # overflow と style も削除
  sed -i '' 's/ overflow="visible"//g' "$f"
  sed -i '' 's/ style="display: block;"//g' "$f"
done
修正例:
xml
<!-- Before (問題あり) -->
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 20 20" ...>

<!-- After (修正後) -->
<svg width="20" height="20" viewBox="0 0 20 20" ...>
症状: 图标被拉伸变形
原因: Figma API返回的SVG包含以下属性:
xml
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" ...>
问题属性影响
preserveAspectRatio="none"
忽略宽高比进行拉伸
width="100%" height="100%"
随父容器伸缩
解决: 修改为固定尺寸
bash
cd icons/
for f in *.svg; do
  # 删除preserveAspectRatio="none"
  sed -i '' 's/ preserveAspectRatio="none"//g' "$f"
  # 将width="100%" height="100%"替换为从viewBox计算出的值
  # 示例: viewBox="0 0 20 20" → width="20" height="20"
  sed -i '' 's/ width="100%" height="100%"//g' "$f"
  # 同时删除overflow和style属性
  sed -i '' 's/ overflow="visible"//g' "$f"
  sed -i '' 's/ style="display: block;"//g' "$f"
done
修改示例:
xml
<!-- Before(有问题) -->
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 20 20" ...>

<!-- After(修正后) -->
<svg width="20" height="20" viewBox="0 0 20 20" ...>

問題2: 白いfill

问题2:白色填充

症状: 白背景でアイコンが見えない
原因:
fill="var(--fill-0, white)"
を含む
解決: currentColorに置換
bash
cd icons/
for f in *.svg; do
  sed -i '' 's/fill="var(--fill-0, white)"/fill="currentColor"/g' "$f"
done
症状: 在白色背景上看不到图标
原因: 包含
fill="var(--fill-0, white)"
解决: 替换为currentColor
bash
cd icons/
for f in *.svg; do
  sed -i '' 's/fill="var(--fill-0, white)"/fill="currentColor"/g' "$f"
done

問題3: CSS変数のfill

问题3:CSS变量填充

症状: SVGの色が変わらない、または透明になる
原因:
fill="var(--fill-0, #XXXXXX)"
形式
解決: CSS変数を実際の色に置換
bash
cd icons/
for f in *.svg; do
  # var(--fill-0, #color) を #color に置換
  sed -i '' 's/fill="var(--fill-0, \([^)]*\))"/fill="\1"/g' "$f"
done
症状: SVG颜色不变化或变为透明
原因: 存在
fill="var(--fill-0, #XXXXXX)"
格式
解决: 将CSS变量替换为实际颜色
bash
cd icons/
for f in *.svg; do
  # 将var(--fill-0, #color)替换为#color
  sed -i '' 's/fill="var(--fill-0, \([^)]*\))"/fill="\1"/g' "$f"
done

currentColorの利点

currentColor的优点

html
<!-- 親要素のcolorを継承 -->
<span style="color: #0b41a0;">
  <svg>...</svg>
</span>
html
<!-- 继承父元素的color属性 -->
<span style="color: #0b41a0;">
  <svg>...</svg>
</span>

よくあるアセットタイプ

常见资源类型

タイプ取得方法形式備考
アイコン(
data-figma-icon-svg
あり)
Figma API export ★SVG親ノード指定で複数パーツを統合
アイコン(
data-figma-asset-url
あり)
MCP asset URLSVG単一アセットの場合
写真/画像MCP asset URLPNG/JPG-
イラストFigma API exportSVG-
スクリーンショットfigma-screenshot.jsPNG-
类型获取方法格式备注
图标(包含
data-figma-icon-svg
Figma API导出 ★SVG指定父节点可整合多个部件
图标(包含
data-figma-asset-url
MCP资源URLSVG适用于单一资源
照片/图片MCP资源URLPNG/JPG-
插画Figma API导出SVG-
截图figma-screenshot.jsPNG-

トラブルシューティング

故障排除

問題原因解決策
アイコンが歪む
preserveAspectRatio="none"
属性を削除、固定サイズに修正
アイコンが不完全子ノードIDを指定している
data-figma-icon-svg
の親ノードIDでFigma API取得
SVGが白く表示
fill="white"
currentColor
に置換
SVGの色がおかしい
fill="var(--fill-0, ...)"
CSS変数を実際の色に置換
API exportがnullラスター含むノードMCP asset URLを使用
ダウンロード失敗リダイレクト未対応302/301をフォロー
トークンエラーFIGMA_TOKEN未設定環境変数またはオプションで指定
问题原因解决办法
图标变形
preserveAspectRatio="none"
删除该属性,修改为固定尺寸
图标不完整指定了子节点ID使用
data-figma-icon-svg
中的父节点ID通过Figma API获取
SVG显示为白色
fill="white"
替换为
currentColor
SVG颜色异常
fill="var(--fill-0, ...)"
将CSS变量替换为实际颜色
API导出返回null节点包含光栅图像使用MCP资源URL
下载失败未处理重定向处理302/301重定向
Token错误未设置FIGMA_TOKEN通过环境变量或选项指定

親ノードIDについて

关于父节点ID

Figmaのアイコンは複数のレイヤーで構成されることがあります:
Circle/Ai (親ノード: 2348:3191) ← data-figma-icon-svg に指定
├── Background (子ノード: 2348:3192)
├── Ellipse (子ノード: 2348:3195)
└── Icon (子ノード: 2348:3196)
この場合、親ノードID
2348:3191
をFigma APIに渡すことで、全パーツを含む完全なSVGを取得できます。
Figma的图标可能由多个图层组成:
Circle/Ai (父节点: 2348:3191) ← 指定在data-figma-icon-svg中
├── Background (子节点: 2348:3192)
├── Ellipse (子节点: 2348:3195)
└── Icon (子节点: 2348:3196)
这种情况下,将父节点ID
2348:3191
传递给Figma API,即可获取包含所有部件的完整SVG。

出力例

输出示例

project/
└── icons/
    ├── home.svg
    ├── notification.svg
    ├── all-courses.svg
    ├── my-courses.svg
    ├── mypage.svg
    ├── todo-plan.svg
    ├── circle-check.svg
    ├── info.svg
    └── forward.svg
project/
└── icons/
    ├── home.svg
    ├── notification.svg
    ├── all-courses.svg
    ├── my-courses.svg
    ├── mypage.svg
    ├── todo-plan.svg
    ├── circle-check.svg
    ├── info.svg
    └── forward.svg

関連スキル

相关技能

  • converting-figma-to-html: HTML変換
  • extracting-design-tokens: デザイントークン抽出
  • converting-figma-to-html: HTML转换
  • extracting-design-tokens: 设计令牌提取