快速入门
只需三步,您就可以从终端、脚本或应用中将图像转换为 SVG。
1 · 创建您的帐户
使用您的电子邮件和密码(10 个字符以上)在客户门户上注册。无需信用卡。
2 · 创建 API 密钥
在门户中创建一个密钥。它仅显示一次 — 请妥善保存。密钥类似于 ptp_live_…,可随时撤销。
3 · 调用 /v1/convert
将图像作为 multipart/form-data 发送,并在 Authorization 标头中附上密钥。SVG 会在响应主体中返回。
您的第一次转换
curl -sS -f -X POST https://api.pixel-to-path.com/v1/convert \
-H "Authorization: Bearer ptp_live_YOUR_KEY" \
-F "[email protected]" \
-F "colormode=binary" \
-o logo.svg
交互式参考文档:pixel-to-path.com/v1/docs (OpenAPI/Swagger).
身份验证
每个请求都通过 Authorization 标头中的 Bearer 令牌进行身份验证:
Authorization: Bearer ptp_live_0123abc…
- 密钥是秘密:它们在服务器端经过哈希存储,并且在创建时仅显示一次。丢失密钥?撤销它并创建一个新密钥。
- 一个帐户,多个密钥:最多可创建 5 个有效密钥以分离您的项目。您的每月免费额度按帐户计算,而不是按密钥计算。
- 即时撤销:已撤销的密钥会立即停止工作,无论是从门户撤销还是封禁帐户的 API 响应。
POST /v1/convert
在单个无状态调用中完成上传和转换。一次成功的调用最多消耗 1 个积分 — 失败、无效或受速率限制的调用不收费。
请求 (multipart/form-data)
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
file |
file | — | 要转换的图像。PNG、JPEG、BMP 或 WebP · 最大 20 MB · 最大 5000 万像素 · 最小 64×64 像素。 |
colormode |
string | color |
<code>color</code> 使用 VTracer 引擎,<code>binary</code> 使用 Potrace(黑白)。 |
mode |
string | spline |
仅限 Color (VTracer) — 在 binary 模式下被忽略。 spline | polygon | none |
hierarchical |
string | stacked |
仅限 Color (VTracer) — 在 binary 模式下被忽略。 stacked | cutout |
filter_speckle |
int | 4 |
仅限 Color (VTracer) — 在 binary 模式下被忽略。 0–16 — 去除细小的噪点斑块。 |
color_precision |
int | 6 |
仅限 Color (VTracer) — 在 binary 模式下被忽略。 1–8 — 每个颜色通道的有效位数。 |
layer_difference |
int | 16 |
仅限 Color (VTracer) — 在 binary 模式下被忽略。 0–64 — 颜色图层之间的距离。 |
corner_threshold |
int | 60 |
0–180 — 角点检测角度(两种引擎通用)。 |
length_threshold |
float | 4.0 |
3.5–10 — 最小分段长度(两种引擎通用)。 |
splice_threshold |
int | 45 |
0–180 — 路径拆分角度(两种引擎通用)。 |
path_precision |
int | 3 |
0–8 — 路径坐标中的小数位数。 |
invert |
bool | false |
仅限 Binary (Potrace) — 在 color 模式下被忽略。 描摹浅色区域而不是深色区域。 |
turdsize |
int | 2 |
仅限 Binary (Potrace) — 在 color 模式下被忽略。 0–20 — 抑制不超过此尺寸的斑点。 |
alphamax |
float | 1.0 |
仅限 Binary (Potrace) — 在 color 模式下被忽略。 0–1.334 — 角点平滑阈值。 |
opttolerance |
float | 0.2 |
仅限 Binary (Potrace) — 在 color 模式下被忽略。 0–10 — 曲线优化容差。 |
由 "colormode" 决定的两个引擎
API 运行的引擎与免费在线转换器和桌面应用完全相同:
binary — Potrace
对线稿、扫描件、草图和徽标进行黑白描摹。图像的暗部(灰度 < 50%)将被描摹在白色背景上。可以使用 turdsize(降噪)、alphamax(平滑拐角)和 opttolerance(路径优化)微调输出。
color — VTracer
用于插画、卡通和照片的分层彩色矢量化。通过 filter_speckle、color_precision、layer_difference 控制细节水平,并通过 mode (spline, polygon, none) 控制曲线拟合。
图像的预处理与网站上完全相同:在转换之前,最长边将被调整为 1500 像素,API 会在 X-Detected-Type 标头中返回检测到的图像类型(line_art、logo、photo 或 illustration)。
响应
成功时:200 OK 并且带有 image/svg+xml — 主体即是 SVG 文件本身。包含信息的标头:
| 标头 | 描述 |
|---|---|
X-Credits-Remaining | 扣除本次调用后,帐户上剩余的付费积分。 |
X-Free-Remaining | 本月剩余的免费转换次数。 |
X-Detected-Type | 检测到的图像类型 (信息):line_art, logo, photo 或 illustration。 |
X-Processing-Time | 服务器处理时间(秒)。 |
GET /v1/me
用于调用该请求的密钥的帐户状态。免费 — 绝不计入您的额度,绝不扣分。
响应示例
GET /v1/me
Authorization: Bearer ptp_live_…
{
"key": { "name": "prod", "prefix": "ptp_live_0123abc", … },
"usage": {
"month": "2026-09", "free_used": 7, "free_limit": 10,
"free_remaining": 3, "resets_at": "2026-10-01T00:00:00+00:00"
},
"credits": { "balance": 120 }
}
错误
每个错误都会返回一致的 JSON 格式。失败的调用永远不会消耗积分。
HTTP/1.1 402 Payment Required
{
"error": {
"code": "quota_exceeded",
"message": "Monthly free quota used and no credits left.",
"usage": { "free_used": 10, "free_limit": 10, "credits": 0 }
}
}
| HTTP | 代码 | 出现情况 |
|---|---|---|
| 401 | invalid_api_key | 缺少、格式错误、未知或已撤销的 API 密钥。 |
| 402 | quota_exceeded | 每月免费额度已用完,且无剩余积分。 |
| 403 | account_banned | 该帐户已被封禁 — 其所有密钥均被拒绝。 |
| 403 | ip_blocked | 调用者 IP 在阻止列表中。 |
| 413 | file_too_large | 文件大于 20 MB。 |
| 422 | invalid_image / image_too_small / invalid_params | 图像无效、图像太小或参数值无效。 |
| 429 | rate_limited | 超出了每个密钥的速率限制 (见下文)。包含 Retry-After 标头。 |
| 500 | internal_error | 服务器端转换失败 — 不收取积分。 |
速率限制
限制按 API 密钥应用,而不是按 IP 应用,因此共享办公室或 CI 运行器永远不会因为其他人的流量而受罚。
| 限制 | 值 |
|---|---|
| 每分钟请求数 (每个密钥) | 60 |
| 每天请求数 (每个密钥) | 2 000 |
| 并发转换数 (每个密钥) | 2 (多余的调用将等待,随后返回 429) |
| 最大文件大小 / 分辨率 | 20 MB / 5000 万像素 |
定价
每个新帐户都会获得每月 10 次免费转换,无需信用卡。需要更多?购买预付费图像 — 任意数量 (以 50 张为一批次),并享受批量折扣。它们永不过期,并可与您的每月免费额度叠加 (优先消耗免费转换次数)。
预付费图像
0.050 €/ 张图像
| 图片数 | 50–450 | 500–2 450 | 2 500–9 950 | 10 000–49 950 | 50 000+ |
|---|---|---|---|---|---|
| €/image | 0.050 | 0.040 | 0.030 | 0.020 | 0.010 |
- 购买 1 张图像 = 1 次转换 (积分永不过期)
- 永不过期,与免费层叠加
- 任意数量:从 500 张起 0.040 €/张,最低 0.010 €/张
自动发放积分:付款后几秒钟内通过付款 webhook 更新您的余额。退款将扣除购买的积分,上限为当前余额。由 Lemon Squeezy 提供安全结账 (自动处理增值税)。
代码示例
复制并修改使用。该 API 使用简单的 multipart/form-data,因此任何 HTTP 客户端均可运行。
cURL
curl -sS -f -X POST https://api.pixel-to-path.com/v1/convert \
-H "Authorization: Bearer ptp_live_YOUR_KEY" \
-F "[email protected]" \
-F "colormode=color" \
-F "filter_speckle=4" \
-o photo.svg
Python
import requests
resp = requests.post(
"https://api.pixel-to-path.com/v1/convert",
headers={"Authorization": "Bearer ptp_live_YOUR_KEY"},
files={"file": open("photo.jpg", "rb")},
data={"colormode": "color", "filter_speckle": 4},
)
resp.raise_for_status()
print(resp.headers["X-Credits-Remaining"], "credits left")
with open("photo.svg", "wb") as f:
f.write(resp.content)
JavaScript
const form = new FormData();
form.append("file", new Blob([imageBytes]), "photo.jpg");
form.append("colormode", "color");
const resp = await fetch("https://api.pixel-to-path.com/v1/convert", {
method: "POST",
headers: { "Authorization": "Bearer ptp_live_YOUR_KEY" },
body: form,
});
if (!resp.ok) {
const { error } = await resp.json();
throw new Error(`${error.code}: ${error.message}`);
}
const svg = await resp.text();
console.log(resp.headers.get("X-Credits-Remaining"), "credits left");
常见问题解答
什么算作一次转换?
一次成功返回 SVG 的 POST /v1/convert 调用。失败的调用 (无效图像、错误参数、速率受限、服务器错误) 和 GET /v1/me 调用永远不会被收费。
如何计算每月免费额度?
按帐户,以 UTC 日历月计算 — 它在 1 日的 00:00 UTC 重置。创建多个 API 密钥不会增加免费额度:一个帐户的所有密钥共享相同的 10 次免费转换。
积分会过期吗?
不会。购买的积分会保留在您的帐户中,直到您使用它们。只有在您的每月 10 次免费转换次数耗尽后,才会消耗它们。
我如何在一个月内获得更多转换次数?
从客户门户购买预付费图像 — 任意数量,以 50 张为一批。您始终能准确看到您获得的图像数量:50 张 2.50 €,500 张 20 €,2,500 张 75 €,10,000 张 200 €,50,000 张 500 €。积分将在付款后几秒钟内自动添加到您的帐户中 — 没有许可证密钥,不需要输入任何内容。
如果我丢失了 API 密钥怎么办?
密钥以哈希形式存储,因此无法恢复。在门户中撤销丢失的密钥并创建一个新密钥 — 它会立即生效。
支持哪些图像格式?
PNG、JPEG、BMP 和 WebP,最大 20 MB 和 5000 万像素,至少 64×64 像素。最长边超过 1500 像素的图像会在转换前调整大小,这与免费网站上完全相同。
准备好进行大规模矢量化了吗?
不到两分钟即可创建您的帐户,获取密钥并进行首次调用。
获取免费的 API 密钥