调用api练习(2)

我继续拓展之前的api练习。

1.扩展 Story 模型,增加用于存储插图URL或文件路径的字段。
2.集成百度文心一格或同类文生图API,开发一个后端服务。该服务接收一个故事标题或一段故事正文,调用AI生成一张符合故事意境的插图。
3.实现将生成的图片保存至本地或云存储,并将图片信息与对应的 Story 记录关联。

1.获取api接口,文生图我使用的是即梦AI

image

2.了解接入前的准备,使用trae进行编码,调整前端:

image
image

文生图功能是基于即梦API(V2.1)实现的图片生成服务,能够根据文本描述生成对应图片并保存到本地,作为故事的配图使用。该功能封装在ImengApiService类中,提供了完整的图片生成、下载、保存和错误处理机制。

核心实现

  1. API配置与初始化
    ImengApiService通过构造函数注入必要的API参数,包括访问密钥、端点、服务区域等配置信息,使服务能够灵活适配不同的部署环境。
    @Autowired
    public ImengApiService(
    String imengAccessKeyId,
    String imengSecretAccessKey,
    String imengEndpoint,
    String imengService,
    String imengRegion,
    String imengSchema,
    String imengPath,
    String imengAction,
    String imengVersion,
    RestTemplate restTemplate,
    ResourceLoader resourceLoader) {
    // 初始化配置
    }

  2. 图片生成流程
    主要通过generateAndSaveImage方法实现,流程如下:
    验证API密钥是否有效,无效则使用默认占位图,设置API参数,包括模型版本、文本提示、图片尺寸等,通过doRequest方法发送请求并获取响应,解析API响应,提取图片URL,将生成的图片下载并保存到本地。

  3. API调用与安全验证
    实现了完整的AWS V4签名算法,包括:

  • SHA256哈希计算
  • HMAC-SHA256签名生成
  • 规范化请求构建
  • 签名密钥派生

确保API请求的安全性和完整性。

  1. 图片处理与保存
    目录管理:自动创建图片存储目录(static/images
    文件命名:使用故事ID和时间戳生成唯一文件名
    下载机制:设置合理的超时时间(10秒),支持重试逻辑
    路径返回:返回相对URL路径,便于前端引用

  2. 错误处理与容错机制
    实现了多层错误处理策略:

  3. API错误处理:检查API返回码,处理调用失败情况

  4. URL提取容错:支持多种响应格式,灵活提取图片URL

  5. URL清理:自动移除URL中的无效字符(如反引号)
    4.占位图片生成:当图片生成失败时,创建真正的GIF格式占位图
    private String createPlaceholderImage(String fileName, Integer storyId) throws IOException {
    // 创建1x1像素的黑色GIF图片,确保浏览器能正确识别为图片
    byte[] gifHeader = {
    (byte)0x47, (byte)0x49, (byte)0x46, (byte)0x38, (byte)0x39, (byte)0x61, // GIF89a
    // ... 其他GIF二进制数据
    };

    Files.write(filePath, gifHeader);
    // 异常情况下创建空文件作为备用
    }

总结
文生图功能通过合理的API调用策略、完善的错误处理机制和优化的参数设置,实现了稳定可靠的文本到图像的转换服务。特别是在错误处理和占位图生成方面的优化,确保了即使在API调用失败的情况下,系统也能提供基本的图片占位功能,保证了整体用户体验的连贯性。

posted @ 2026-01-06 14:35  老汤姆233  阅读(12)  评论(0)    收藏  举报