jsp中的Java显示基64字节数组

jsp中的Java显示基64字节数组,java,image,jsp,base64,bufferedimage,Java,Image,Jsp,Base64,Bufferedimage,我有一个名为Graphic的类,它创建一个新的BuffereImage,绘制一个新的Graphics2D,并将此图像作为base64编码字符串返回: BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = image.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASIN

我有一个名为Graphic的类,它创建一个新的BuffereImage,绘制一个新的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代码可以做到。

非常感谢。将图像类型更改为png,并将BufferDiImage的类型更改为键入_4BYTE_ABGR就可以做到这一点!