SVG图像转换工具

一个基于Rust的SVG图像转换服务器,提供SVG到PNG/JPEG的高性能转换功能,支持自动尺寸检测和多种输出格式。

  • by lihongjie0209
  • Rust
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 lihongjie0209/svg-mcp

使用说明

SVG MCP服务器

用Rust编写的模型上下文协议(MCP)服务器,提供SVG到图像的转换工具。

特性

  • svg_to_png:将SVG文本内容转换为PNG图像格式
  • svg_to_jpeg:将SVG文本内容转换为JPEG图像格式
  • 自动尺寸检测:默认情况下使用SVG画布大小,具有可选的自定义尺寸
  • 灵活的输出:在临时文件路径(默认)或base64编码数据之间进行选择
  • 支持自定义尺寸和JPEG质量设置
  • 使用resvg和micro skia进行高性能SVG渲染

快速开始

选项1:NPM(推荐)

# Install globally
npm install -g @svg-mcp/svg-mcp

# Or run directly with npx (no installation needed)
npx @svg-mcp/svg-mcp

所有平台二进制文件都会自动包含在内- 无需额外下载.

选项2:下载预构建的二进制文件

下载自 GitHub发布:

  • Windows x64: svg-mcp-windows-x64.zip (MSVC构建-推荐)
  • Windows x64 GNU: svg-mcp-windows-x64-gnu.zip (GNU构建-替代)
  • Linux x64: svg-mcp-linux-x64.tar.gz
  • macOS英特尔: svg-mcp-macos-x64.tar.gz
  • macOS苹果硅: svg-mcp-macos-arm64.tar.gz

所有二进制文件都是通过以下方式自动构建的 GitHub操作CI/CD 以获得一致的质量。

选项3:从源代码构建

# Clone the repository
git clone https://github.com/lihongjie0209/svg-mcp.git
cd svg-mcp

# Build for your platform
cargo build --release

# The binary will be at: target/release/svg-mcp (or .exe on Windows)

有关详细的构建说明,请参阅 BUILD_GUIDE.md.

使用Claude Desktop

使用NPM包(推荐)

{
  "mcpServers": {
    "svg-converter": {
      "command": "npx",
      "args": ["@svg-mcp/svg-mcp"]
    }
  }
}

使用本地二进制

{
  "mcpServers": {
    "svg-converter": {
      "command": "/path/to/svg-mcp",
      "args": []
    }
  }
}

安装方法比较

方法 优点 缺点
NPM ✅ 简易安装
✅ 自动更新
✅ 跨平台
✅ 无需手动设置
✅ CI构建质量
❌ 需要Node.js
❌ 包装尺寸更大
GitHub二进制文件 ✅ 无依赖关系
✅ 占地面积最小
✅ CI构建质量
❌ 手动更新
❌ 平台特定下载
从源代码构建 ✅ 最新功能
✅ 可定制的
✅ 最小尺寸
❌ 需要Rust工具链
❌ 构建时间
❌ 手动更新

建立质量保证

🏗️ 所有二进制文件都是使用GitHub Actions CI/CD构建的:

  • ✅ 清洁环境:内置全新CI跑步器
  • ✅ 一致的:所有平台的构建过程相同
  • ✅ 已测试:发布前自动测试
  • ✅ 可再生:源代码与版本完全匹配
  • ✅ 安全:内置GitHub的安全基础设施

可用工具

svg_to_png

将SVG文本转换为PNG图像格式。

参数:

  • svg_content (string):SVG内容为XML字符串
  • width (可选数字):输出图像宽度(如果未指定,则使用SVG画布宽度)
  • height (可选数字):输出图像高度(如果未指定,则使用SVG画布高度)
  • return_base64 (可选布尔值):是否返回base64数据而不是文件路径(默认值:false)

退货:

{
  "file_path": "path/to/temporary/file.png",
  "mime_type": "image/png"
}

或者什么时候 return_base64 是真的:

{
  "base64_data": "base64-encoded-png-data",
  "mime_type": "image/png"
}

svg_to_jpeg

将SVG文本转换为JPEG图像格式。

参数:

  • svg_content (string):SVG内容为XML字符串
  • width (可选数字):输出图像宽度(如果未指定,则使用SVG画布宽度)
  • height (可选数字):输出图像高度(如果未指定,则使用SVG画布高度)
  • quality (可选数字):JPEG质量1-100(默认值:85)
  • return_base64 (可选布尔值):是否返回base64数据而不是文件路径(默认值:false)

退货:

{
  "file_path": "path/to/temporary/file.jpg",
  "mime_type": "image/jpeg"
}

或者什么时候 return_base64 是真的:

{
  "base64_data": "base64-encoded-jpeg-data",
  "mime_type": "image/jpeg"
}

示例用法

SVG内容示例

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <circle cx="100" cy="100" r="80" fill="blue" stroke="red" stroke-width="4"/>
  <text x="100" y="110" text-anchor="middle" fill="white" font-family="Arial" font-size="16">Hello SVG!</text>
</svg>

转换为PNG(使用SVG原始大小)

{
  "tool": "svg_to_png",
  "arguments": {
    "svg_content": "<svg width=\"200\" height=\"200\">...</svg>"
  }
}

转换为具有自定义大小的PNG

{
  "tool": "svg_to_png",
  "arguments": {
    "svg_content": "<svg>...</svg>",
    "width": 400,
    "height": 400
  }
}

使用base64输出转换为PNG

{
  "tool": "svg_to_png",
  "arguments": {
    "svg_content": "<svg>...</svg>",
    "return_base64": true
  }
}

转换为JPEG(使用SVG原始大小)

{
  "tool": "svg_to_jpeg",
  "arguments": {
    "svg_content": "<svg width=\"200\" height=\"200\">...</svg>",
    "quality": 90
  }
}

转换为具有自定义大小和base64输出的JPEG

{
  "tool": "svg_to_jpeg",
  "arguments": {
    "svg_content": "<svg>...</svg>",
    "width": 600,
    "height": 600,
    "quality": 95,
    "return_base64": true
  }
}

技术细节

建筑

  • MCP协议:实现工具集成的模型上下文协议
  • SVG渲染:使用resvg和usvg进行高质量的SVG渲染
  • 自动调整大小:从SVG viewBox或宽度/高度属性中提取画布尺寸
  • 智能缩放:指定自定义尺寸时应用适当的缩放变换
  • 图像编码:支持PNG和JPEG输出格式
  • 异步运行时:基于Tokio构建,实现高效异步处理

依赖项

  • rmcp:用于协议实现的Rust MCP SDK
  • resvg:SVG渲染引擎
  • usvg:SVG解析和优化
  • tiny-skia:二维图形渲染
  • image:图像编码和处理
  • base64:用于数据返回的Base64编码
  • tempfile:具有适当文件扩展名的临时文件管理

尺寸检测逻辑

  1. 默认行为:从SVG中提取尺寸 width 和 height 属性或 viewBox
  2. 自定义尺寸:指定后,SVG会缩放以适应目标大小
  3. 宽高比:保持适当的缩放变换以保持SVG外观

演出

  • 快速SVG解析和渲染
  • 内存高效的像素缓冲区处理
  • 优化了PNG和JPEG格式的编码
  • 可扩展以处理各种图像大小
  • 自动尺寸检测消除了猜测
  • 临时文件包括正确的文件扩展名(.png、.jpg)

发展

地方发展

# Check code
cargo check
cargo clippy

# Run tests
cargo test

# Run locally
cargo run

# Build for your platform
cargo build --release

CI/CD及其发布

所有生产版本都使用GitHub Actions CI/CD:

  • 🏗️ 自动化建筑:每次推送和公关触发都会建立
  • 🔖 版本发布:Git标签自动创建版本
  • 📦 NPM出版:发布自动发布到NPM
  • 🧪 质量检测:所有构建都包括自动化测试
  • 🌐 多平台:同时为Windows、Linux和macOS构建

看 BUILD_GUIDE.md 有关完整的CI/CD详细信息。

编码结构

  • src/lib.rs:核心转换逻辑和MCP服务器实现
  • src/main.rs:服务器入口点和CLI界面
  • src/test.rs:功能验证测试程序
  • .github/workflows/build.yml:CI/CD管道定义

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果需要,添加测试
  5. 提交拉取请求

CI系统将自动在所有平台上构建和测试您的更改。

文档

许可证

该项目根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。

支持