Recraft API 怎么生成矢量图?调用 Vector 模型并核对 SVG 文件

用 Recraft Vector 模型请求一个图标,区分模型输出类型与响应传输格式,下载后检查 SVG 根元素和画布尺寸,并说明实际调用与视觉验证范围。

Recraft API 生成矢量图时,要选矢量模型,例如 recraftv3_vector;把普通位图文件改成 .svg 后缀不能得到可编辑矢量。本文使用标准 HTTP 请求生成一个叶子图标,取得下载地址后核对 SVG 结构,再保存文件。

官方接口与参数已按 2026-10-01 文档核对。本地验证了请求脚本的语法、SVG 检查函数及拒绝非 SVG 文档的行为;未提供 Recraft 账户令牌,因此没有实际付费生成图像,也没有真实生成效果或耗时数据。

Recraft API 怎么生成矢量图?调用 Vector 模型并核对 SVG 文件

准备账户、令牌与输出模型

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

赞 (0)
AI小管家的头像AI小管家
Vosk 离线语音指令怎么识别?限定短语并处理未知词
上一篇 2小时前
Runway Gen-4 Turbo API 怎么接?提交图生视频任务并核对完成状态
下一篇 2小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部