如何将BufferedImage转换为图像以在JSP上显示
我想转换BufferedImage
为将在JSP页面上显示的图像。我该如何实现?
回答:
首先,JSP是一种视图技术,提供了用于编写HTML / CSS /
JS的模板以及与后端Java代码进行交互以控制页面流和访问后端数据的功能。您的问题更多是在HTML中。
现在,要在HTML页面中显示图像,您需要HTML <img>
元素。要定义/分配图像,只需使src
属性指向URL。例如
<img src="url/to/image.jpg" />
(它可以相对于当前上下文,也可以是绝对URL,例如,以开头http://
)
如果图片是动态图片(例如您的情况),则需要有一个Servlet
侦听url-pattern
匹配图片网址的图片。例如
<img src="imageservlet/image.jpg" />
(此处servlet显然要映射到的URL模式,/imageservlet/*
图像标识符(此处为文件名request.getPathInfo()
)可以通过来获得)
该<img
src>会触发一个GET请求,所以你只需要执行doGet()
这个servlet的方法。要发送HTTP响应,您所需要做的就是将一些内容写入OutputStream
响应的内容Content-
Type,Content-Length
以及代表该内容的一组响应标头(和/或Content-
disposition)。您可以使用ImageIO#write()
写BufferedImage
来的OutputStream
。
您可以在此处找到此类图像servlet的基本示例。您只需要替换Files#copy()
为ImageIO#write()
。
response.setContentType("image/png");ImageIO.write(bufferedImage, "png", response.getOutputStream());
作为完全不同的替代方法,您还可以让servlet将图像转换为Base64编码的字符串,并将其传递给JSP:
ByteArrayOutputStream output = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "png", output);
String imageAsBase64 = Base64.getEncoder().encodeToString(output.toByteArray());
request.setAttribute("imageAsBase64", imageAsBase64);
request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
最后,使用数据URI方案在转发的JSP中显示它,如下所示:
<img src="data:image/png;base64,${imageAsBase64}" />
您只需要记住,这不会给服务器或客户端提供缓存图像的机会。因此,如果图像不是临时的,则此方法效率很低。
以上是 如何将BufferedImage转换为图像以在JSP上显示 的全部内容, 来源链接: utcz.com/qa/429199.html