74c1725473
后端:
- POST /api/v1/generate 接收 projectId,生成 taskId,将图片保存至 generation/{projectId}/{taskId}/
- 新增 GET /api/v1/tasks/:taskId 和 GET /api/v1/tasks/:taskId/assets 查询端点
- 添加 /generation 静态文件服务,前端可通过 URL 直接访问生成的图片
- PipelineInput 增加 ProjectID/TaskID 字段
前端:
- generate.ts 对接真实后端 API,移除 mock 模式
- 401 时不再强制登出跳转,改为抛错由调用方处理
- GeneratePage 加载工程风格,传递 projectId 和完整参数
- generation store 简化为同步 API 模式,移除 WebSocket mock
- ResultPage 使用 getTask/getAssets 按 taskId 查询结果
66 lines
1.8 KiB
Go
Executable File
66 lines
1.8 KiB
Go
Executable File
package handler
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"net/http"
|
|
|
|
"gen2d/internal/model"
|
|
"gen2d/internal/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// EditImageRequest 图片编辑请求。
|
|
type EditImageRequest struct {
|
|
Image string `json:"image" binding:"required"` // 底图 base64 编码
|
|
Prompt string `json:"prompt" binding:"required"` // 编辑指令
|
|
Count int `json:"count"` // 生成数量,默认 1
|
|
}
|
|
|
|
// editAssetResponse 编辑结果素材(返回 base64)。
|
|
type editAssetResponse struct {
|
|
Data string `json:"data"`
|
|
Format string `json:"format"`
|
|
}
|
|
|
|
// EditImageResponse 图片编辑响应体。
|
|
type EditImageResponse struct {
|
|
Assets []editAssetResponse `json:"assets"`
|
|
}
|
|
|
|
// EditImage 图片编辑接口,基于已有图片和文本指令生成修改后的图片。
|
|
func EditImage(c *gin.Context) {
|
|
var req EditImageRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, model.Fail(http.StatusBadRequest, "参数错误: "+err.Error()))
|
|
return
|
|
}
|
|
|
|
imageData, err := base64.StdEncoding.DecodeString(req.Image)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, model.Fail(http.StatusBadRequest, "图片 base64 解码失败: "+err.Error()))
|
|
return
|
|
}
|
|
|
|
count := req.Count
|
|
if count <= 0 {
|
|
count = 1
|
|
}
|
|
|
|
images, err := service.EditImages(c.Request.Context(), imageData, req.Prompt, count)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, model.Fail(http.StatusInternalServerError, "图片编辑失败: "+err.Error()))
|
|
return
|
|
}
|
|
|
|
assets := make([]editAssetResponse, len(images))
|
|
for i, img := range images {
|
|
assets[i] = editAssetResponse{
|
|
Data: base64.StdEncoding.EncodeToString(img.Data),
|
|
Format: img.Format,
|
|
}
|
|
}
|
|
|
|
c.JSON(http.StatusOK, model.OK(EditImageResponse{Assets: assets}))
|
|
}
|