Sring.ai生成图片的功能---OpenAiImageClient

简介: 随着大模型的升级迭代,现在越来越多的人都开始接入API接口了,尤其是JAVA的同学们,上一篇文章介绍了,从零搭建一个环境,用于调用openai的key,进行访问AI接口,进行一些对话的功能,本篇文章主要介绍生成图片的接口。希望可以帮助到正在学习spring.ai的同学一些参考。

前言:

随着大模型的升级迭代,现在越来越多的人都开始接入API接口了,尤其是JAVA的同学们,上一篇文章介绍了,从零搭建一个环境,用于调用openai的key,进行访问AI接口,进行一些对话的功能,本篇文章主要介绍生成图片的接口。希望可以帮助到正在学习spring.ai的同学一些参考。

概念介绍:

一、OpenAiImageClient 的核心功能

OpenAiImageClient 是 Spring AI 框架中用于与 OpenAI 图像生成接口(如 DALL·E)交互的客户端工具,提供以下核心能力:

  1. 图像生成
    根据文本描述生成高质量图像,支持多种参数配置(如分辨率、生成数量、质量等)
  2. API 封装
    简化与 OpenAI 图像 API 的通信流程,包括 HTTP 请求构建、身份验证(API Key)、参数序列化及响应解析9
  3. 灵活配置
    支持通过配置文件(如 application.yml)或代码动态覆盖参数,适配不同场景需求

二、OpenAiImageClient 的使用方法

1. 基础配置

application.yml 中配置 OpenAI 的 API 密钥及默认参数:

spring:
  ai:
    openai:
      api-key: sk-xxxxxxxxxxxxxxxx  # 替换为实际 API 密钥
      base-url: https://api.openai.com/v1  # OpenAI 接口地址
      image:
        options:
          model: gpt-4-dalle  # 使用的模型(如 DALL·E)
          quality: hd         # 图像质量(标准/高清)
          n: 1               # 生成图像数量
          height: 1024        # 图像高度
          width: 1024         # 图像宽度

此配置会作为全局默认值生效9

2. 依赖注入与接口调用

在控制器中注入 OpenAiImageClient,并调用其生成图像的接口:

@RestController
public class ImageController {
    @Resource
    private OpenAiImageClient openAiImageClient;
    @RequestMapping("/ai/image")
    public Object generateImage(@RequestParam String msg) {
        // 构造请求:包含文本提示和配置选项
        ImagePrompt prompt = new ImagePrompt(
            msg, 
            OpenAiImageOptions.builder()
                .withQuality("hd")
                .withN(1)
                .withHeight(1024)
                .withWidth(1024)
                .build()
        );
        
        // 调用 API 生成图像
        ImageResponse response = openAiImageClient.call(prompt);
        
        // 提取结果中的图像 URL
        String imageUrl = response.getResult().getOutput().getUrl();
        return imageUrl;
    }
}
  • 代码说明
  • ImagePrompt 封装了用户输入的文本提示(如 "一只太空猫")及配置参数。
  • call() 方法同步发送请求,返回 ImageResponse 对象,包含生成图像的元数据和 URL9

3. 动态参数覆盖

若需在代码中动态修改配置(如临时调整图像尺寸):

ImageResponse response = openAiImageClient.call(
    new ImagePrompt(msg, OpenAiImageOptions.builder()
        .withQuality("standard")
        .withWidth(512)
        .withHeight(512)
        .build()
);

注意:代码中的配置优先级高于全局配置文件9


三、底层逻辑解析

1. 请求流程

  • 参数封装OpenAiImageClient 将用户输入的文本和配置参数封装为符合 OpenAI API 规范的 JSON 请求体。
  • HTTP 通信:通过 Spring 的 RestTemplate WebClient 发送 POST 请求至 OpenAI 的 /images/generations 端点。
  • 身份验证:自动在请求头中添加 Authorization: Bearer {api-key}9

2. 响应处理

  • 数据解析:将 OpenAI 返回的 JSON 响应反序列化为 ImageResponse 对象。
  • 结果提取:从 ImageResponse 中提取图像 URL 或二进制数据,供业务层处理(如存储、展示)9

3. 错误处理

  • 异常捕获:自动处理网络错误、API 限流(如 HTTP 429)及 OpenAI 返回的业务错误(如无效参数)。
  • 重试机制:可通过 Spring Retry 模块配置重试策略(需额外依赖)9

四、应用场景示例

  1. 创意设计:根据用户描述生成 Logo、插画或广告素材。
  2. 教育工具:将抽象概念(如量子力学)可视化。
  3. 电商平台:自动生成商品展示图。

五、注意事项

  1. 成本控制:OpenAI 按生成图像数量计费,需合理设置 n(生成数量)参数。
  2. 内容安全:需审核生成内容,避免生成违规图像(如暴力、色情)。
  3. 性能优化:高分辨率图像生成耗时较长,可结合异步处理(如 @Async)提升用户体验

实战代码:

一:写一个提示词返回图片的方法:

package org.example;
import jakarta.annotation.Resource;
import org.springframework.ai.image.Image;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.openai.OpenAiImageClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AiController {
    @Resource
    private OpenAiChatClient aiClient;
    @Autowired
    private OpenAiImageClient openAiImageClient;
    @PostMapping("/ask")
    public String askQuestion(@RequestBody String prompt) {
        return aiClient.call(prompt);
    }
    @GetMapping("/get")
    public String GetInfo() {
        return aiClient.call("JAVA学习路线");
    }
    /**
     * 生成图片
     */
    @GetMapping(value = "generateImage",produces = "text/html")
    public String generateImage(String prompt) {
        ImageResponse response = openAiImageClient.call(new ImagePrompt(prompt));
        Image outImage = response.getResult().getOutput();
        //url地址
        String url = outImage.getUrl();
        return "<img src='"+url+"'/>";
    }
}

二:执行结果的返回:

三、生成的效果:

最后:

生成图片需要注意风险点,不能违规生成图片,以及进行测试的时候,注意到描述提示词的用法,表达的越仔细要求的token越多,现在使用这个key对于token的消耗还是很大的。

目录
打赏
0
2
2
0
541
分享
相关文章
JeecgBoot AI 应用开发平台,AIGC 功能介绍
JeecgBoot推出AIGC功能模块,包含AI应用开发平台与知识库问答系统,支持AI流程编排、模型管理、知识库训练及向量库对接。基于LLM大语言模型,提供智能对话、RAG检索增强生成等功能,兼容多种大模型(如DeepSeek、Qwen等)。平台结合低代码与AIGC,适用于复杂业务场景,支持快速原型到生产部署,助力用户打造个性化智能体,如“诗词达人”或“翻译助手”,并可嵌入第三方系统提升交互能力。项目开源,欢迎体验与交流。
51 0
JeecgBoot AI 应用开发平台,AIGC 功能介绍
用 AI 搭建秒杀平台后端,一周搞定所有功能(附超详细踩坑记录)
本文分享如何借助AI技术快速搭建电商秒杀平台后端。通过飞算JavaAI,从需求分析到代码生成全流程智能化,大幅提高开发效率。文章详细记录了技术栈选择(Java、Spring Boot、MySQL、Redis)、系统架构设计、缓存机制优化、数据一致性保障及测试调优等环节,解决高并发难题,助开发者高效完成秒杀平台构建并规避常见坑点。
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
128 31
Anus:公开整活!完全用 Manus 复刻 Manus 功能的开源 AI 智能体项目
Anus 是一个开源 AI 智能体项目,复刻了 Manus 的部分功能,支持自然语言指令执行、多代理协作、多模态输入处理等功能,旨在为开发者提供强大且灵活的工具。
381 1
Anus:公开整活!完全用 Manus 复刻 Manus 功能的开源 AI 智能体项目
通义灵码 AI 程序员核心功能体验
阿里云通义灵码AI程序员已全面上线,成为全球首个同时支持 VS Code、JetBrains IDEs 开发工具的AI程序员产品。
907 1
通义灵码 AI 程序员核心功能体验
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
3252 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
通义灵码AI程序员功能体验评测
通义灵码插件新版本支持AI程序员功能,帮助我在VSCode中实现类似dify或fastgpt的智能体工作流功能(基于Vue)。初步体验显示,AI对需求理解深刻,能生成框架代码并以版本新增模式体现。但快照切换存在小瑕疵,如顺序反了和需手动点击切换按钮。总体而言,该功能有助于结对编程和代码审查,提升开发效率。
124 19
通义灵码 AI 程序员与开发者结伴编程,全栈开发电商工程的前后端功能需求
当你又收到了项目新需求的时候,可以尝试下载并使用通义灵码,让通义灵码 AI 程序员跟你一起结伴编程,它具备多文件代码修改和工具使用的能力,可以与你结伴协同完成编码任务,如需求实现、缺陷修复、单元测试生成、批量代码修改等,成为你的左膀右臂。下面我们就跟AI程序员结伴编程完成前后端需求的开发吧!
189 0
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
183 29
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
鸿蒙 Next 对接 AI API 实现文字对话功能指南
本指南介绍如何在鸿蒙 Next 系统中对接 AI API,实现文字对话功能。首先通过 DevEco Studio 创建项目并配置网络权限,选择合适的 AI 服务(如华为云或百度文心一言)。接着,使用 Node.js 转发请求,完成客户端与服务器端代码编写。最后进行功能测试与优化,确保多轮对话顺畅、性能稳定。此过程需严格遵循开发规范,充分利用系统资源,为用户提供智能化交互体验。