Recraft API 生成矢量图时,要选矢量模型,例如 recraftv3_vector;把普通位图文件改成 .svg 后缀不能得到可编辑矢量。本文使用标准 HTTP 请求生成一个叶子图标,取得下载地址后核对 SVG 结构,再保存文件。
官方接口与参数已按 2026-10-01 文档核对。本地验证了请求脚本的语法、SVG 检查函数及拒绝非 SVG 文档的行为;未提供 Recraft 账户令牌,因此没有实际付费生成图像,也没有真实生成效果或耗时数据。

准备账户、令牌与输出模型
API 入门文档给出的令牌入口是 Recraft 账户 API 页面,余额满足要求后生成令牌,请求使用 Authorization: Bearer。把令牌设置为本机环境变量 RECRAFT_API_TOKEN,不写在代码或素材文件中。API 余额与调用权限要先在自己的账户核对。
V3 模型说明明确 recraftv3_vector 输出 SVG;本文固定使用它,避免随着默认模型升级而改变输出类型。图像响应说明中的 response_format=url 决定通过 URL 取回图像,和是否生成矢量是两件独立的配置。
在独立 Python 环境安装 requests==2.34.2。设置好环境变量后,把代码保存为 generate_vector.py,执行 python generate_vector.py。提示词要求居中、少量形状、无文字的绿色叶子图标,n=1 只请求一张。
import os
from pathlib import Path
import xml.etree.ElementTree as ET
import requests
def validate_svg(data):
root=ET.fromstring(data)
if root.tag.split('}')[-1] != 'svg':
raise ValueError('Downloaded document is not an SVG root')
if not root.get('viewBox') and not (root.get('width') and root.get('height')):
raise ValueError('SVG lacks viewBox or explicit dimensions')
return root
def main():
token=os.environ['RECRAFT_API_TOKEN']
response=requests.post('https://external.api.recraft.ai/v1/images/generations',
headers={'Authorization':f'Bearer {token}'},
json={'model':'recraftv3_vector','n':1,'response_format':'url',
'prompt':'A simple flat vector icon of a green leaf, centered, minimal shapes, no text'},
timeout=180)
response.raise_for_status()
payload=response.json()
items=payload.get('data')
if not isinstance(items,list) or not items or not items[0].get('url'):
raise ValueError('Generation response has no image URL')
url=items[0]['url']
if not url.startswith('https://'):
raise ValueError('Expected HTTPS image URL')
downloaded=requests.get(url, timeout=60)
downloaded.raise_for_status()
root=validate_svg(downloaded.content)
temporary=Path('leaf.svg.part')
temporary.write_bytes(downloaded.content)
temporary.replace('leaf.svg')
print('saved: leaf.svg')
print('svg_root:', root.tag)
print('bytes:', len(downloaded.content))
if __name__=='__main__':
main()
先检查响应,再检查文件
请求路径和 JSON 参数见 官方端点文档。代码先检查 HTTP 状态,再确认 data 数组中存在 HTTPS URL;下载后解析 XML,要求根元素是 svg,且存在 viewBox 或明确的宽高。通过检查才把临时文件改名为 leaf.svg。
实际调用成功后,应看到 saved: leaf.svg、SVG 根元素和非零文件大小。这些是程序应报告的验收字段,不是本文展示的已生成结果。打开下载文件,放大到 400% 查看边缘,再用矢量编辑器检查路径和填充能否编辑。
XML 根元素通过只证明文件容器符合 SVG,不能证明画面全由可编辑路径组成。还应检查是否内嵌 raster image、是否含多余背景、图标是否居中,以及缩小到目标尺寸后是否清晰。含文字的图标尤其需要人工逐字核对。
报错与输出不符怎样排查
- 认证或余额错误:先检查令牌权限、账户 API 余额和响应状态,不把错误正文保存成图像。
- 下载超时:保存生成响应中的结果信息,先重试下载已有结果;不要直接重复提交新的生成请求。
- 得到 PNG/WebP:核对 model 是否仍为 recraftv3_vector;位图格式参数不能替代矢量模型选择。
- SVG 解析失败:检查下载内容是否为错误页面、链接是否仍有效、文件是否完整;不要只换后缀。
生成 POST 超时或网络中断时,远端可能已经受理;先保存已收到的信息并核对账户记录,再决定是否重提,避免重复生成与扣费。本文不保证每次生成都满足品牌规范;商用前也要核对素材来源和当前账户条款。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31870.html