gpt4 book ai didi

java - 使用 bufferedimage java 设置图像 src

转载 作者:行者123 更新时间:2023-11-30 02:33:28 25 4
gpt4 key购买 nike

在 Java 应用程序中,我使用对话框内的 webview 在 HTML 报告中显示带有图像的文本..

图像是饼图,以下函数将图表转换为缓冲图像:

protected static BufferedImage draw(JFreeChart chart, int width, int height)
{
BufferedImage img = new BufferedImage(width , height, BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = img.createGraphics();

chart.draw(g2, new Rectangle2D.Double(0, 0, width, height));

g2.dispose();

return img;
}

我需要通过将图像标签的 src 设置为此图像来在 HTML 内容中显示此图像:

.. <img src='" + draw(..) +"' alt=\"\" height=\"230\" width=\"390\">..  

我无法提取该缓冲图像的路径..

在采用这种方式之前,我尝试将图像保存在系统中,然后在图像标记中设置其路径,但问题是,当处理事件并导出图像时,它第一次出现在报告中时间,在第二次处理事件并且导出的图像报告显示旧图像!这是导出图像时使用的函数:

public static void saveToFile(JFreeChart chart, String aFileName, int width, int height, double quality) throws FileNotFoundException, IOException {

BufferedImage img = draw( chart, width, height );

FileOutputStream fos = new FileOutputStream(aFileName);

JPEGImageEncoder encoder2 =

JPEGCodec.createJPEGEncoder(fos);

JPEGEncodeParam param2 =

encoder2.getDefaultJPEGEncodeParam(img);

param2.setQuality((float) quality, true);

encoder2.encode(img,param2);

fos.close();

}

最佳答案

您可以使用ImageIO.write()将图像写入文件,然后检索byte[],如下所示:

ImageIO.write(bufferedImage,"png",new File("tmpImage.png"));
byte[] imageBytes = Files.readAllBytes(Paths.get("tmpImage.png"));

然后使用Base64.Encoder,您可以将图像转换为可以传递到 html 的 Base64 字符串。看看这个:

Base64.Encoder encoder = Base64.getEncoder();

String encoding = "data:image/png;base64," + encoder.encodeToString(imageBytes);

<img src='" + encoding +"' alt=\"\" height=\"230\" width=\"390\">.

您必须在实际编码之前添加 data:image/png;base64, String 。这告诉浏览器它正在查看什么类型的数据

因此,在您的 draw() 方法中,您只需返回一个 String 即可,而不是返回 BufferedImage。 Base64 对于此类事情非常方便,但也有其缺点。存储 Base64 图像时,它们比实际图像的对应部分稍重。幸运的是,通过此实现,base64 永远不会触及您的磁盘。

关于java - 使用 bufferedimage java 设置图像 src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com