# 图片生成接口文档 ## 接口概述 轻量级 HTTP 图片生成服务,用于根据画布配置和商品数据生成营销图片。该接口返回 base64 格式的图片数据,不做文件落地,便于外部(如 Python)直接调用获取图片切片。 **运行环境**: 仅在 Electron 渲染进程中可用(需要 Node.js 能力) --- ## 接口信息 ### 基本信息 - **接口地址**: `http://localhost:3001/generate` - **请求方法**: `POST` - **Content-Type**: `application/json` - **请求体大小限制**: 最大 50MB ### 接口路径 ``` POST /generate ``` --- ## 请求参数 ### 请求体结构 ```json { "canvasList": [], // 画布配置数组(必填) "goodsList": [] // 商品数据数组(必填) } ``` ### 参数说明 #### 1. canvasList(画布配置数组) 画布配置数组,每个元素代表一个画布模板。 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | index | number | 是 | 画布索引,从 0 开始 | | canvas_json | string | 是 | Fabric.js 画布配置的 JSON 字符串,或特殊值 `"scene"`(场景图) | | width | number | 是 | 画布宽度(像素) | | height | number | 是 | 画布高度(像素) | | bg_color | string | 是 | 背景色,如 `"#fff"` | | name | string | 否 | 画布名称 | | preview | string | 否 | 预览图 URL | | tpl_url | string | 否 | 模板 URL | | image_path | string | 否 | 图片路径 | | canvas_type | string | 否 | 画布类型:`"normal"`(普通)、`"model"`(模特图)、`"scene"`(场景图) | | multi_goods_mode | string | 否 | 多商品模式 | | max_goods_count | number \| null | 否 | 最大商品数量 | **canvas_json 说明**: - 普通画布:Fabric.js 格式的 JSON 字符串,包含 `version`、`objects`、`background` 等字段 - 场景图:直接传入字符串 `"scene"` #### 2. goodsList(商品数据数组) 商品数据数组,每个元素是一个对象,键为款号(styleKey),值为商品信息。 **数据结构**: ```json { "款号(styleKey)": { "款号": "string", // 款号,如 "E305-01003" "设计理念": "string", // 设计理念文案(可选,款级) "货号资料": [ // 货号数组 { "货号": "string", // 货号,如 "A596351" "颜色": "string", // 颜色,如 "黑色" "设计理念": "string", // 设计理念文案(可选,货号级,优先级高于款级) "pics": { // 图片路径对象 "视角名称": "string" // 键为视角名称(如"俯视"、"侧视"、"后跟"等),值为图片路径 } } ] } } ``` **pics 对象说明**: - 键:视角名称,如 `"俯视"`、`"侧视"`、`"后跟"`、`"鞋底"`、`"内里"` 等 - 值:图片文件路径(支持本地路径,如 `"C:\\Users\\...\\image.png"`) --- ## 响应格式 ### 成功响应 **HTTP 状态码**: `200` **响应体**: ```json { "code": 0, "images": [ { "canvasIndex": 0, // 画布索引 "dataUrl": "data:image/png;base64,..." // base64 格式的图片数据 } ], "plans": [] // 渲染计划数组(内部使用) } ``` **响应字段说明**: | 字段 | 类型 | 说明 | |------|------|------| | code | number | 响应码,0 表示成功 | | images | array | 生成的图片数组 | | images[].canvasIndex | number | 对应的画布索引 | | images[].dataUrl | string | base64 格式的图片数据,可直接用于 `` | | plans | array | 渲染计划数组(内部数据结构) | ### 失败响应 **HTTP 状态码**: `500` **响应体**: ```json { "code": 1, "msg": "error message" } ``` **响应字段说明**: | 字段 | 类型 | 说明 | |------|------|------| | code | number | 响应码,1 表示失败 | | msg | string | 错误信息 | ### 其他错误响应 | HTTP 状态码 | 说明 | 响应体 | |------------|------|--------| | 404 | 路径或方法错误 | `"Not Found"` | | 413 | 请求体过大(>50MB) | `"Payload Too Large"` | --- ## 调用示例 ### JavaScript/TypeScript 示例 ```javascript const response = await fetch('http://localhost:3001/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ canvasList: [ { index: 0, canvas_json: '{"version":"5.2.1","objects":[{"type":"image","src":"...","left":0,"top":0}],"background":"#fff"}', width: 395, height: 618, bg_color: "#fff", name: "画布_1", canvas_type: "normal" } ], goodsList: [ { "AC5120913": { "款号": "E305-01003", "设计理念": "平衡舒适性、美观性、功能性和工艺品质", "货号资料": [ { "货号": "A596351", "颜色": "黑色", "设计理念": "满足现代消费者在不同场景下的需求", "pics": { "俯视": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\1.png", "侧视": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\2.png", "后跟": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\3.png", "鞋底": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\4.png", "内里": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\5.png" } } ] } } ] }) }) const result = await response.json() if (result.code === 0) { console.log('生成成功,共', result.images.length, '张图片') result.images.forEach(img => { console.log(`画布 ${img.canvasIndex} 的图片:`, img.dataUrl.substring(0, 50) + '...') }) } else { console.error('生成失败:', result.msg) } ``` ### Python 示例 ```python import requests import json url = "http://localhost:3001/generate" payload = { "canvasList": [ { "index": 0, "canvas_json": '{"version":"5.2.1","objects":[],"background":"#fff"}', "width": 395, "height": 618, "bg_color": "#fff", "name": "画布_1", "canvas_type": "normal" } ], "goodsList": [ { "AC5120913": { "款号": "E305-01003", "货号资料": [ { "货号": "A596351", "颜色": "黑色", "pics": { "俯视": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\1.png", "侧视": "C:\\Users\\Administrator\\Desktop\\img\\A596351\\2.png" } } ] } } ] } response = requests.post(url, json=payload) if response.status_code == 200: result = response.json() if result.get("code") == 0: print(f"生成成功,共 {len(result['images'])} 张图片") for img in result["images"]: print(f"画布 {img['canvasIndex']} 的图片已生成") # 可以保存 base64 图片 # data_url = img["dataUrl"] # base64_data = data_url.split(",")[1] # with open(f"output_{img['canvasIndex']}.png", "wb") as f: # f.write(base64.b64decode(base64_data)) else: print(f"生成失败: {result.get('msg')}") else: print(f"请求失败,状态码: {response.status_code}") ``` ### cURL 示例 ```bash curl -X POST http://localhost:3001/generate \ -H "Content-Type: application/json" \ -d '{ "canvasList": [ { "index": 0, "canvas_json": "{\"version\":\"5.2.1\",\"objects\":[],\"background\":\"#fff\"}", "width": 395, "height": 618, "bg_color": "#fff", "name": "画布_1", "canvas_type": "normal" } ], "goodsList": [ { "AC5120913": { "款号": "E305-01003", "货号资料": [ { "货号": "A596351", "颜色": "黑色", "pics": { "俯视": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\img\\\\A596351\\\\1.png", "侧视": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\img\\\\A596351\\\\2.png" } } ] } } ] }' ``` --- ## 注意事项 1. **运行环境限制**: 该接口仅在 Electron 渲染进程中可用,需要 Node.js 集成能力。在普通浏览器环境中无法使用。 2. **端口占用**: 接口默认监听 `3001` 端口,确保该端口未被占用。 3. **请求体大小**: 请求体大小限制为 50MB,超过此限制将返回 `413` 错误。 4. **图片路径**: - 支持本地文件路径(Windows 路径格式:`C:\\Users\\...`) - 确保图片文件存在且可访问 5. **canvas_json 格式**: - 普通画布必须是有效的 Fabric.js JSON 字符串 - 场景图使用特殊值 `"scene"` 6. **错误处理**: 建议在调用时捕获异常,并根据 `code` 字段判断请求是否成功。 7. **base64 图片使用**: - 返回的 `dataUrl` 可直接用于 HTML `` 标签的 `src` 属性 - 如需保存为文件,需要提取 base64 数据部分(去掉 `data:image/png;base64,` 前缀) --- ## 版本信息 - **接口版本**: v1.0 - **最后更新**: 2024-12-09