Expo资产生成工具

一个用于生成和转换Expo资产的本地MCP服务器和CLI工具,支持图像裁剪、预览和多种格式转换,适用于移动应用开发中的图标和启动画面生成。

  • by elber-code
  • HTML
  • 本地部署
  • 更新于
在 GitHub 查看 elber-code/expo-assets-mcp

使用说明

世博资产mcp

本地MCP服务器,用于生成和转换Expo资产。还包括一个CLI脚本,可以直接从终端运行它。


项目结构

src/
├── expo-assets.ts   ← reusable logic (asset definitions, image transformations)
├── index.ts         ← MCP server
└── generate.ts      ← CLI script
dist/                ← compiled output (generated with npm run build)

安装

npm install
npm run build

Web生成器

这个工具的纯JavaScript版本可以直接在浏览器中使用!打开 index.html 或访问 https://elber-code.github.io/expo-assets-mcp/ 访问具有以下功能的丰富GUI:

  • 交互式裁剪:以1:1的纵横比将图标完美居中。
  • 实时图标预览:实时查看您的图标在iOS(方形)和Android(圆形)形状中的外观,背景为透明或实心。
  • 高级横幅:通过将世博会资产(如Splash、Icon)放置在自定义分辨率内单独下载,生成App Store模型或促销横幅。
  • 自定义ZIP资源:轻松地将额外的自定义大小的资源添加到最终的ZIP中。
  • 双语界面:在英语和西班牙语之间无缝切换(index_es.html).

无需后端或服务器;所有内容都在浏览器中本地处理!


CLI使用情况

从源图像生成所有Expo资源。在名为的图像旁边创建一个文件夹 <image>-assets/.

node dist/generate.js <image-path> [options]

选项:

标志 描述
--bg "#rrggbb" 背景颜色。省略透明
--no-overwrite 跳过已存在的文件

示例:

# Transparent background
node dist/generate.js /Users/me/logo.png

# With background color
node dist/generate.js /Users/me/logo.png --bg "#E6F4FE"

输出:

/Users/me/logo-assets/
├── icon.png
├── android-icon-foreground.png
├── android-icon-background.png
├── android-icon-monochrome.png
├── splash-icon.png
├── favicon.png
├── react-logo.png
├── react-logo@2x.png
├── react-logo@3x.png
└── partial-react-logo.png

MCP使用(克劳德桌面)

复制 claude-config.example.json 到 claude-config.json,填写正确的路径,然后将其合并到:

~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "expo-assets-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/expo-assets-mcp/dist/index.js"]
    }
  }
}

使用MCP检查员进行测试

npx @modelcontextprotocol/inspector node dist/index.js

可用的MCP工具

generate_expo_icons

将所有10个Expo资产生成为一个 assets/images/ 文件夹。

参数 类型 默认值 说明
input_image string -- 源映像的绝对路径
output_dir string -- 世博项目的绝对路径 assets/images/ 文件夹
background_color string 透明 十六进制背景颜色(例如。 #E6F4FE).省略透明。
overwrite 布尔值 true 覆盖现有文件
proportions object 见表 每项资产的内容比例(0.1-1.0)

比例:

关键字 资产 默认值
icon icon.png 0.7
android_adaptive android-icon-foreground/background.png 0.33
android_monochrome android-icon-monochrome.png 0.33
splash splash-icon.png 0.5
favicon favicon.png 0.8
react_logo react-logo.png + @2x + @3x 0.8
partial_logo partial-react-logo.png 0.5

transform_image

将图像转换为具有可选内容比例和背景的特定尺寸。

参数 类型 默认值 说明
input_image string -- 源图像的路径(PNG、JPEG、WebP、TIFF、AVIF)
output_path string -- 包括文件名和扩展名的完整输出路径(例如。 /path/result.webp)
width number -- 输出画布宽度(像素)
height number -- 输出画布高度(像素)
proportion 编号 1 内容填充画布的多少(0.1-1.0,1=填充所有内容)
background_color string 透明 画布背景颜色(十六进制)。省略透明。
format png|jpeg|webp png 输出 文件格式
quality 编号 95 仅适用于jpeg/webp的压缩质量(1=最低,100=最高)

convert_svg

按指定尺寸将SVG文件转换为PNG、JPEG或WebP。

参数 类型 默认值 说明
input_svg string -- 源SVG文件的绝对路径
output_path string -- 包括文件名和扩展名的完整输出路径
width number -- 输出宽度(像素)
height number proportional 输出高度(像素)。省略从宽度按比例缩放。
format png|jpeg|webp png 输出文件格式
background_color string 透明 背景颜色(十六进制)。省略透明(仅PNG)。
quality 编号 95 仅适用于jpeg/webp的压缩质量(1=最低,100=最高)

已生成资产

Expo会自动处理这10个文件中所有特定于平台的大小调整。

源图像要求

  • 格式: 便携式网络图形
  • 最小尺寸: 1024×1024像素
  • 背景 透明 (推荐)

资产表

文件 画布 背景 转换 app.json键
icon.png 1024×1024 background_color 或透明 contain,居中,道具0.7 expo.icon
android-icon-foreground.png 512×512 始终透明 contain,居中,道具0.33 android.adaptiveIcon.foregroundImage
android-icon-background.png 512×512 background_color 或透明 contain,居中,道具0.33 android.adaptiveIcon.backgroundImage
android-icon-monochrome.png 432×432 始终透明 白色剪影,道具0.33 android.adaptiveIcon.monochromeImage
splash-icon.png 1024×1024 始终透明 contain,居中,道具0.5 expo-splash-screen > image
favicon.png 48×48 始终透明 contain,居中,支柱0.8 web.favicon
react-logo.png 100×100 始终透明 contain居中,道具0.8 装饰UI@1x
react-logo@2x.png 200×200 始终透明 contain居中,道具0.8 装饰性UI@2x
react-logo@3x.png 300×300 始终透明 contain,居中,道具0.8 装饰UI@3x
partial-react-logo.png 518×316 始终透明 顶部右侧裁剪,道具0.5 装饰性UI局部

特殊转换

android-icon-monochrome.png --白色轮廓

每个不透明像素都转换为纯白色。Android 13+使用此功能 主题图标,用系统颜色主题为轮廓着色。

pixel (r, g, b, a > 10)  →  (255, 255, 255, a)
pixel (r, g, b, a ≤ 10)  →  unchanged (transparent)

partial-react-logo.png --剖面裁剪

源图像的一部分被裁剪而没有失真:

  • 水平: 右侧(端部)
  • 垂直: 从顶部(开始)
  • 该部分按比例缩放,以适应518×316画布

partial_logo: 0.5 → 右半部· partial_logo: 0.33 → 右第三

安卓自适应图标——安全区

将重要内容保留在 66%中心 (512×512画布上为338×338像素),以避免被任何Android启动器形状剪切。

┌─────────────────┐  512×512
│                 │
│  ┌───────────┐  │
│  │  safe     │  │  338×338 (66%)
│  │  zone     │  │
│  └───────────┘  │
│                 │
└─────────────────┘

脚本

npm run build   # compile TypeScript
npm start       # start MCP server
npm run dev     # run with tsx (no compile needed)