我想转换 BufferedImage
到将显示在 JSP 页面上的图像。我怎样才能做到这一点?
最佳答案
首先,JSP 是一种 View 技术,它提供了一个模板来编写 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
的响应,以及一组表示内容的响应 header ( Content-Type
、 Content-Length
和/或 Content-disposition
)。您可以使用 ImageIO#write()
写一个 BufferedImage
到 OutputStream
.您可以找到此类图像 servlet 的基本示例 here .你只需要更换
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);
最后使用 data URI scheme 在转发的 JSP 中显示它如下:<img src="data:image/png;base64,${imageAsBase64}" />
您只需要记住,这不会给服务器和客户端缓存图像的机会。因此,如果图像不是临时的,这种方法显然是低效的。也可以看看:
关于image - 如何将 BufferedImage 转换为图像以在 JSP 上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438375/