From 47bd3a5cc7260b14382a3a38e386e26ecee2d08d Mon Sep 17 00:00:00 2001 From: yinhuaiwei Date: Thu, 9 Apr 2026 18:24:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=8A=93=E6=8B=8D?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E6=97=B6=E7=9A=84=E5=85=9C=E5=BA=95=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IvsResourceRetryableDelegate.java | 55 +++++++++++------- .../src/main/resources/images/ivs_error.jpg | Bin 0 -> 19697 bytes 2 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 inspect-ivs/src/main/resources/images/ivs_error.jpg diff --git a/inspect-ivs/src/main/java/com/inspect/ivs/service/IvsResourceRetryableDelegate.java b/inspect-ivs/src/main/java/com/inspect/ivs/service/IvsResourceRetryableDelegate.java index 498df36..5192f28 100644 --- a/inspect-ivs/src/main/java/com/inspect/ivs/service/IvsResourceRetryableDelegate.java +++ b/inspect-ivs/src/main/java/com/inspect/ivs/service/IvsResourceRetryableDelegate.java @@ -27,9 +27,6 @@ import org.springframework.stereotype.Component; import org.springframework.util.StreamUtils; import javax.annotation.Resource; -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -282,28 +279,12 @@ public class IvsResourceRetryableDelegate { } public InputStream generateErrorImage() { - int width = 400, height = 200; - BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - Graphics2D g = bufferedImage.createGraphics(); - - // 背景 - g.setColor(Color.WHITE); - g.fillRect(0, 0, width, height); - - // 字体 - g.setColor(Color.RED); - g.setFont(new Font("Arial", Font.BOLD, 20)); - g.drawString("Get Picture Fail", 120, 100); - g.dispose(); - try { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - ImageIO.write(bufferedImage, "png", os); byte[] bytes; if (testMode) { bytes = loadDefaultImage(); } else { - bytes = os.toByteArray(); + bytes = loadErrorImage(); } return new ByteArrayInputStream(bytes); } catch (IOException e) { @@ -311,6 +292,40 @@ public class IvsResourceRetryableDelegate { } } +// public InputStream generateErrorImage() { +// int width = 400, height = 200; +// BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); +// Graphics2D g = bufferedImage.createGraphics(); +// +// // 背景 +// g.setColor(Color.WHITE); +// g.fillRect(0, 0, width, height); +// +// // 字体 +// g.setColor(Color.RED); +// g.setFont(new Font("Arial", Font.BOLD, 20)); +// g.drawString("Get Picture Fail", 120, 100); +// g.dispose(); +// +// try { +// ByteArrayOutputStream os = new ByteArrayOutputStream(); +// ImageIO.write(bufferedImage, "png", os); +// byte[] bytes; +// if (testMode) { +// bytes = loadDefaultImage(); +// } else { +// bytes = os.toByteArray(); +// } +// return new ByteArrayInputStream(bytes); +// } catch (IOException e) { +// throw new RuntimeException("生成错误图片失败", e); +// } +// } + + public byte[] loadErrorImage() throws IOException { + ClassPathResource imgFile = new ClassPathResource("images/ivs_error.jpg"); + return StreamUtils.copyToByteArray(imgFile.getInputStream()); + } public byte[] loadDefaultImage() throws IOException { ClassPathResource imgFile = new ClassPathResource("images/ivs_default.jpg"); diff --git a/inspect-ivs/src/main/resources/images/ivs_error.jpg b/inspect-ivs/src/main/resources/images/ivs_error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..895a3d09d8f72d9ad6ec3a61c42d7bd11e42d509 GIT binary patch literal 19697 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 fO8A0TLewrkp?G;JJ2%rAH`bdw^5