准备工作
在使用 Spring+OpenAI 生成图像之前,需要准备好以下环境和工具:
(1)Java 开发环境,建议使用 JDK1.8 及以上版本;
(2)Maven 项目管理工具,用于管理项目依赖;
(3)OpenAI API key,用于调用 OpenAI 的图像生成 API。
创建 Maven 项目
使用 Maven 创建一个新的 Java 项目,并在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai</artifactId>
<version>1.0.0</version>
</dependency>
复制代码
这里我们使用了 OpenAI 提供的 Java SDK,该 SDK 封装了 OpenAI API 的调用方式,可以方便地在 Java 项目中调用 OpenAI API。
配置 OpenAI API key
在项目中添加 OpenAI API key 的配置,可以使用 Spring Boot 提供的 @ConfigurationProperties 注解来完成。例如:
@ConfigurationProperties(prefix = "openai")
public class OpenAIProperties {
private String apiKey;
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
}
复制代码
在配置文件中添加如下配置:
openai:
api-key: <your-openai-api-key>
复制代码
调用 OpenAI API
在 Spring 框架中调用 OpenAI API,可以使用 RestTemplate 或者 Feign Client。这里我们介绍使用 RestTemplate 来调用 OpenAI API 的方式。
首先,在 Spring Boot 的配置文件中添加 RestTemplate 的配置:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
复制代码
然后,在代码中调用 OpenAI API:
@Autowired
private RestTemplate restTemplate;
@Autowired
private OpenAIProperties openAIProperties;
public byte[] generateImage() throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("Authorization", "Bearer " + openAIProperties.getApiKey());
// 构造请求参数
Map<String, Object> data = new HashMap<>();
data.put("model", "image-alpha-001");
data.put("prompt", "A beautiful sunset");
data.put("num_images", 1);
data.put("size", "512x512");
String requestBody = new ObjectMapper().writeValueAsString(data);
HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<byte[]> response = restTemplate.exchange("https://api.openai.com/v1/images/generations", HttpMethod.POST, requestEntity, byte[].class);
if (response.getStatusCode() != HttpStatus.OK) {
throw new Exception("Failed to generate image: " + response.getStatusCode());
}
return response.getBody();
}
复制代码
在上述代码中,我们使用 RestTemplate 来发送 POST 请求到 OpenAI 的图像生成 API,并将返回的结果转换为字节数组类型。其中,请求参数需要指定生成图像的模型名称、生成图像的提示语、生成图像的数量和大小等信息。在请求头中需要添加 Authorization 字段,其值为 OpenAI API key。
将生成的图像保存到本地
调用 OpenAI API 生成图像后,可以将生成的图像保存到本地文件系统中,或者直接在 Web 页面中显示。
在 Spring 框架中,可以使用 ResourceLoader 和 FileCopyUtils 来实现将字节数组保存为文件的功能。例如:
@Autowired
private ResourceLoader resourceLoader;
public void saveImage() throws Exception {
byte[] imageData = generateImage();
Resource resource = resourceLoader.getResource("file:/path/to/save/image.jpg");
FileCopyUtils.copy(imageData, resource.getOutputStream());
}
复制代码
在上述代码中,我们使用 ResourceLoader 来获取保存图像的文件资源,然后使用 FileCopyUtils 将字节数组写入到文件中。
评论