我想在从文件系统检索为 url 的图像上绘制文本。输出应该是字符串,这样我就可以传递到 Angular 前端并显示图像。下面是我的代码:
private String addTextToImage(String imagePath, String text, int x, int y) throws Exception {
URL url = new URL(imagePath);
// Fetch the image from the URL
BufferedImage image = null;
try {
disableSSLCertificateChecking();
image = ImageIO.read(url.openStream());
// Continue processing
} catch (Exception e) {
logger.error("Error loading image from URL: " + imagePath, e);
throw new Exception("Failed to load image", e);
}
// Get the graphics object from image
Graphics2D g = (Graphics2D) image.getGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setFont(new Font("Arial", Font.BOLD, 30)); // Set font size and style
g.setColor(Color.BLACK); // Set text color
// Draw the text on the image
g.drawString(text, x, y);
g.dispose();
// Save image to disk for debugging (optional)
ImageIO.write(image, "png", new File("output_with_text.png"));
// Convert the modified image to a byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();
// Encode the byte array to Base64 string
return Base64.getEncoder().encodeToString(imageBytes);
}
但是代码似乎不起作用,没有显示图像,当我导航到图像网址时,图像已损坏,知道吗?
你的代码看起来不错。它确实会使用您的文本生成图像的 base64。
这可能是您使用 api 的输出来显示图像的方式。
将 api 数据添加到带有
img
的 src="data:image/png;base64,image_data_from_api"
标签中。图像应该会显示。
以下代码,
<img src="data:image/png;base64,image_data_from_api" />