SVG 文字生成器 API 文档
功能概述
这个 API 提供了生成防 OCR SVG 文本的功能,可以生成带有各种变形、噪点和颜色效果的文本图像,
使其难以被自动文字识别系统识别,同时保持人眼可读性。生成的 SVG 支持自定义宽度、字体大小、
文字效果和颜色模式等。
示例效果
深色文字 (Dark Mode)
深色系文字,适合在浅色背景使用
浅色文字 (Light Mode)
浅色系文字,适合在深色背景使用
全彩色文字 (Colorful)
每个字符可能使用不同的鲜艳颜色
自定义颜色 (Custom Colors)
使用预定义的几种颜色
黑色无变形 (Plain Black)
纯黑色文字,无变形效果,最易阅读
HTTP REST API 接口规范
服务遵循统一的 RESTful API 规范,所有 JSON 响应均包含 status 状态码以及 success: true/false 业务状态标记。
1. 健康检查接口
GET /health
响应示例 (HTTP 200):
{
"success": true,
"status": 200,
"message": "Service is healthy",
"service": "svg-text-nodejs",
"version": "1.0.0",
"timestamp": "2026-10-06T08:00:00.000Z",
"uptime": 128
}
2. 文本加密调试接口
GET /api/encrypt?text=要加密的文本
响应示例 (HTTP 200):
{
"success": true,
"status": 200,
"originalText": "要加密的文本",
"encryptedData": "3f8a...:9c2b...",
"previewUrl": "/api/svg?data=3f8a...%3A9c2b...&width=375&theme=dark",
"data": {
"originalText": "要加密的文本",
"encryptedData": "3f8a...:9c2b...",
"previewUrl": "/api/svg?data=3f8a...%3A9c2b...&width=375&theme=dark"
}
}
错误响应示例 (HTTP 400):
{
"success": false,
"status": 400,
"message": "缺少必要参数: 请提供要加密的明文 (GET ?text=xxx)",
"error": "缺少必要参数: 请提供要加密的明文 (GET ?text=xxx)"
}
3. 防 OCR SVG 渲染接口
GET /api/svg?data={加密字符串}&width=375&theme=dark
成功响应: HTTP 200,Content-Type: image/svg+xml,直接返回矢量 SVG 图像文本,支持直接作为 <img src="/api/svg?data=..."> 引用。
异常响应 (HTTP 400):
{
"success": false,
"status": 400,
"message": "非法请求:数据解密失败",
"error": "非法请求:数据解密失败"
}
Node.js 模块底层使用方法
首先引入模块:
const { generateAntiOcrSvg } = require('./svg');
基本用法示例:
generateAntiOcrSvg({
text: '这是一段示例文本内容',
width: 500,
fontSize: 30,
colorMode: 'dark',
distortionLevel: 5,
outputPath: 'output.svg'
}).then(result => {
console.log('SVG 生成成功,尺寸:', result.width, 'x', result.height);
});
获取 SVG 内容但不生成文件:
generateAntiOcrSvg({
text: '这是一段示例文本内容',
width: 500,
fontSize: 30,
colorMode: 'dark'
}).then(result => {
const svgContent = result.svg;
// 可以直接使用 svgContent 字符串,比如嵌入到 HTML 中
});
参数说明
| 参数名 |
类型 |
必填 |
默认值 |
说明 |
| text |
string |
是 |
- |
要显示的文本内容 |
| width |
number |
是 |
600 |
SVG 宽度,用于计算换行位置 |
| fontPath |
string |
否 |
'./fonts/NotoSansSC-Regular.ttf' |
字体文件路径 |
| fontSize |
number |
否 |
30 |
字体大小 |
| lineHeight |
number |
否 |
1.4 |
行高倍数(相对于字体大小) |
| padding |
number |
否 |
20 |
内边距 |
| colorMode |
string |
否 |
'dark' |
颜色模式:'dark'(深色系), 'light'(浅色系), 'colorful'(全彩), 'custom'(自定义色系), 'black'(黑色) |
| customColors |
array |
否 |
[] |
自定义颜色数组,当 colorMode 为 'custom' 时使用,格式: ['rgb(0,0,0)', '#ff0000', ...] |
| distortionLevel |
number |
否 |
5 |
变形程度: 0-10,0 表示无变形 |
| enableNoise |
boolean |
否 |
true |
是否启用噪点 |
| noiseColor |
string |
否 |
'auto' |
噪点颜色,'auto'(自动匹配), 或具体颜色如 '#f6f6f6' |
| noiseDensity |
number |
否 |
500 |
噪点密度,数值越大噪点越少 |
| enableFilter |
boolean |
否 |
true |
是否启用 SVG 滤镜效果 |
| outputPath |
string |
否 |
null |
输出文件路径,不提供则不保存文件,仅返回 SVG 内容 |
返回值
函数返回一个 Promise,解析为包含以下属性的对象:
| 属性名 |
类型 |
说明 |
| svg |
string |
生成的 SVG 内容文本 |
| width |
number |
生成的 SVG 宽度 |
| height |
number |
生成的 SVG 高度 |
注意事项
- SVG 不能自动根据容器大小自动换行,而是需要在生成时预先计算换行位置,所以 width 参数必须提供
- 生成的 SVG 尺寸会根据文本内容和字体大小自动调整
- 可以通过设置 distortionLevel 为 0 来禁用所有变形效果
- 如果需要对抗 OCR,建议使用深色系文字、中等级别的变形和适当的噪点
- 颜色模式会影响可读性和 OCR 识别难度,根据使用场景选择合适的模式