Java在jsp中显示基本64字节数组

标签 java image jsp base64 bufferedimage

我有一个名为 Graphic 的类,它创建一个新的 BufferedImage,绘制一个新的 Graphics2D 并将该图像作为 base64 编码的字符串返回:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

// Draw background
g2.setColor(Color.decode("#FFFFFF"));
g2.fillRect(0, 0, grafikBreite, grafikHoehe);
g2.setColor(Color.decode("#000000"));

// Draw some rectangles and other stuff...
drawStuff(g2);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] imageInByte = {};
try {
  JPEGImageEncoder j = new JPEGImageEncoderImpl(baos);
  j.encode(image);
  imageInByte = baos.toByteArray();
  baos.close();
} catch (IOException e) {
  e.printStackTrace();
}

return javax.xml.bind.DatatypeConverter.printBase64Binary(imageInByte);

在我的 jsp 文件中,我想使用显示此图像,其中图形是之前创建的 Base64 字节数组:

 <img src="data:image/jpg;base64,<c:out value="${graphic}"/>"/>

图像已显示,但问题是图像背景为红色,并且使用的其他颜色也错误。如果我将创建的 Base64 字符串作为 jpeg 文件保存在硬盘上,所有颜色都会正确显示。

有人知道为什么 HTML 显示带有奇怪颜色的图像吗?

感谢帮助

最佳答案

首先进行一些清理:

g2.setColor(Color.WHITE);
g2.fillRect(0, 0, grafikBreite, grafikHoehe);
g2.setColor(Color.BLACK);
drawStuff(g2);
g2.dispose(); // TODO

在createGraphics之后丢弃。

然后可以尝试更通用、可移植的 ImageIO 类。抗锯齿等参数设置有点不同,但 JPEG 无论如何都是一种有损格式。只是想尝试一下不同的角度。

ImageIO.write(image, "jpg", baos);
baos.close();
imageInByte = baos.toByteArray();

然后我先结束了。 (javadoc 对此没有影响。)

可以尝试 .png 和另一种类型,ABGR。

我认为 ImageIO 可以解决问题,或者您的代码具有 ABGR。

关于Java在jsp中显示基本64字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24363671/

相关文章:

java - 在 Java 中对所有值都是 double 的二维数组进行排序

java - Collection<Sub> 转换为 SuperCollection<Super>

java - 重定向表单 jsf 托管 bean 并根据托管 bean 中的条件显示 js 警报

java - 重构:删除构造函数中的重复项

java - 将数据添加到数组列表

javascript - 褪色图像/流畅的网站使用

c++ - 使用 Boost.GIL 将图像转换为 "raw"字节

java - 为什么我的图片不显示? ( java )

java - Struts 2 - 捕获意外异常设置 'xx'

javascript - 如何将值从Jquery 传递给jsp?