我想将BufferedImage
转换为将在JSP页面上显示的图像。我怎样才能做到这一点?
答案 0 :(得分:11)
首先,JSP是一种视图技术,提供编写HTML / CSS / JS的模板,以及与后端Java代码交互以控制页面流和访问后端数据的能力。你的问题更多的是HTML。
现在,要在HTML页面中显示图像,您需要HTML <img>
元素。要定义/分配图像,只需让src
属性指向URL即可。 E.g。
<img src="url/to/image.jpg">
(它可以是相对于当前上下文,也可以是绝对URL,例如以http://
开头)
如果图片是动态的,就像您的情况一样,您需要Servlet
来监听与图片网址匹配的url-pattern
。 E.g。
<img src="imageservlet/image.jpg">
(这里的servlet显然要映射到/imageservlet/*
,图像标识符,这里是文件名,这里可以request.getPathInfo()
}
<img src>
将触发GET请求,因此您只需实现servlet的doGet()
方法。要发送HTTP响应,您需要做的就是将一些内容写入响应的OutputStream
,以及一组代表内容的响应标头(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());
答案 1 :(得分:5)
您无需将BufferedImage
转换为Image
即可在 jsp 页面上显示它。因为,Java 6 JAXB提供javax.xml.bind.DatatypeConverter.printBase64Binary(byte[]) String
将 byte [] 转换为 base 64 string 。通过将源数据指定为<img
,即base 64
;,可以使用src="data:image/jpg
html 标记显示 base 64 string 。以下是this post引用的示例程序。
sample.jsp (测试通过):
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.io.*"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
BufferedImage bImage = ImageIO.read(new File("/home/visruth/Desktop/Visruth.jpg"));//give the path of an image
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( bImage, "jpg", baos );
baos.flush();
byte[] imageInByteArray = baos.toByteArray();
baos.close();
String b64 = javax.xml.bind.DatatypeConverter.printBase64Binary(imageInByteArray);
%>
<div>
<p>As of v6, Java SE provides JAXB</p>
<img src="data:image/jpg;base64, <%=b64%>" alt="Visruth.jpg not found" />
</div>
</body>
</html>
IMO,这种方法非常适合像<img src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" width="200" alt="thumbnail" height="200">
这样的小尺寸图像。否则,在src
属性中使用图片的直接网址会很好,例如: - <img src="uri-of-image/profile-pic.jpg" width="600" alt="No Profie Pic" height="600">