继续来学习spring-ai如何实现“文生图”
一、pom依赖
1 <dependency>
2 <groupId>org.springframework.ai</groupId>
3 <artifactId>spring-ai-starter-model-zhipuai</artifactId>
4 <version>1.0.0</version>
5 </dependency>
spring-ai支持多种文生图的模型,这里我们使用国产的智谱大模型,可以先免费体验 ,api-key申请地址:https://bigmodel.cn/usercenter/proj-mgmt/apikeys
二、yaml配置
spring:
ai:
zhipuai:
api-key: ${zhipuai_api_key}
这里api-key换成真实的key
三、文生图代码
@GetMapping("/image/url")
public String genImageUrl(@RequestParam String prompt) {
var options = ImageOptionsBuilder.builder().height(256).width(256).build();
ImageResponse response = zhiPuAiImageModel.call(
new ImagePrompt(prompt,
options));
Image output = response.getResult().getOutput();
return output.getUrl();
}
@GetMapping("/image/display")
public ResponseEntity<ByteArrayResource> displayImage(@RequestParam String prompt) {
try {
var options = ImageOptionsBuilder.builder().height(256).width(256).build();
ImageResponse response = zhiPuAiImageModel.call(
new ImagePrompt(prompt, options));
Image output = response.getResult().getOutput();
// 获取图片URL
String imageUrl = output.getUrl();
// 下载图片数据
URL url = URI.create(imageUrl).toURL();
byte[] imageData = url.openStream().readAllBytes();
// 创建ByteArrayResource
ByteArrayResource resource = new ByteArrayResource(imageData);
// 设置响应头 - 直接在浏览器中显示
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return ResponseEntity.ok()
.headers(headers)
.body(resource);
} catch (IOException e) {
return ResponseEntity.internalServerError().build();
}
}
运行效果:
文中代码:yjmyzz/spring-ai-sample at day05
参考:
https://docs.spring.io/spring-ai/reference/api/imageclient.html