@PostMapping("/download-image")
public ResponseEntity<String> downloadImage(@RequestParam("imageUrl") String imageUrl) {
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
// 检查响应码是否为200
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
return ResponseEntity.badRequest().body("Failed to download image");
}
// 从输入流中读取数据
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ImageStreamCompressorUtil.compressImage(inputStream, bao, 0.5f); // 压缩质量为50%
// 将压缩后的图片转换为字节数组
byte[] compressedImageBytes = bao.toByteArray();
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.IMAGE_JPEG_VALUE);
// 返回压缩后的图片
// return ResponseEntity.ok().headers(headers).body(compressedImageBytes);
String encodedImage = Base64.getEncoder().encodeToString(compressedImageBytes);
System.out.println("----------------"+encodedImage);
// return encodedImage;
// 返回成功响应
return ResponseEntity.ok(encodedImage);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.internalServerError().body("Error downloading image");
}
}
public class ImageStreamCompressorUtil {
public static void compressImage(InputStream inputStream, OutputStream outputStream, float quality) throws IOException {
// 从输入流中读取图片
BufferedImage inputImage = ImageIO.read(inputStream);
// 确保图片是RGB格式
BufferedImage rgbImage = new BufferedImage(inputImage.getWidth(), inputImage.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = rgbImage.createGraphics();
g.drawImage(inputImage, 0, 0, null);
g.dispose();
// 获取支持的图片写入器(例如JPEG)
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpeg");
if (!writers.hasNext()) {
throw new IllegalStateException("No writers found");
}
ImageWriter writer = writers.next();
// 创建图片输出流
ImageOutputStream ios = ImageIO.createImageOutputStream(outputStream);
writer.setOutput(ios);
// 获取默认的图片写入参数并设置压缩质量
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
// 写入图片
writer.write(null, new IIOImage(rgbImage, null, null), param);
// 清理资源
ios.flush();
writer.dispose();
ios.close();
}
}
08-08
612
