Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将BuffereImage转换为要在JSP上显示的图像_Image_Jsp_Bufferedimage - Fatal编程技术网

如何将BuffereImage转换为要在JSP上显示的图像

如何将BuffereImage转换为要在JSP上显示的图像,image,jsp,bufferedimage,Image,Jsp,Bufferedimage,我想将buffereImage转换为一个将显示在JSP页面上的图像。如何实现这一点?首先,JSP是一种视图技术,它提供了编写HTML/CSS/JS的模板,并能够与后端Java代码交互以控制页面流和访问后端数据。你的问题更多的是HTML 现在,要在HTML页面中显示图像,需要HTML属性指向URL。例如 <img src="url/to/image.jpg" /> <img src="imageservlet/image.jpg" /&g

我想将
buffereImage
转换为一个将显示在JSP页面上的图像。如何实现这一点?

首先,JSP是一种视图技术,它提供了编写HTML/CSS/JS的模板,并能够与后端Java代码交互以控制页面流和访问后端数据。你的问题更多的是HTML

现在,要在HTML页面中显示图像,需要HTML
属性指向URL。例如

<img src="url/to/image.jpg" />
<img src="imageservlet/image.jpg" />
(这里servlet显然要映射到一个URL模式
/imageservlet/*
,图像标识符(这里是文件名)可以通过
request.getPathInfo()
获得。)

将触发GET请求,因此您只需实现servlet的
doGet()
方法。要发送HTTP响应,您只需将一些内容写入响应的
输出流
,以及一组表示内容的响应头(
内容类型
内容长度
和/或
内容处置
)。您可以使用将
缓冲区图像
写入
输出流

您可以找到这样一个图像servlet的基本示例。您只需将
文件#copy()
替换为


作为一种完全不同的选择,您还可以让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);
最后在转发的JSP中使用如下方式显示:

<img src="data:image/png;base64,${imageAsBase64}" />

您只需记住,这不会给服务器或客户端缓存映像的机会。因此,如果图像不是临时的,这种方法显然是低效的


另见:

您不需要将
缓冲区图像
转换为
图像
,即可将其显示在jsp页面上。因为Java6JAXB提供了
javax.xml.bind.DatatypeConverter.printBase64Binary(byte[])字符串
来将byte[]转换为base 64字符串。可以使用
;;显示基64字符串;。这是参考的示例程序

sample.jsp(测试通过):


在此处插入标题
从v6开始,JavaSE提供JAXB

“alt=“Visruth.jpg未找到”/>

在我看来,这种方法非常适合像
这样的小尺寸图像。否则,在
src
属性中使用图像的直接url就可以了,例如:-

BuferedImage
的父类是
image
。你能更具体一些吗?是的,请提供更多需要的信息。你在哪里有这个图像?其中一个可能的方法是使用Servlet,它将编写BuffereImage来响应,然后在JSP页面上编写指向此Servlet的链接。很快,听起来不错,但我不确定它是否涵盖了您的情况……谢谢您的回答。@Md.NaushadAlam这是我的荣幸!在这一行
ImageIO.write(bImage,“jpg”,baos)
你还是要把buffereImage转换成image。它正在把
jpg
image字节写入
baos
数组。
image
是Java中的另一个类,这就是为什么我说“你不需要把
buffereImage
转换成
image
<img src="data:image/png;base64,${imageAsBase64}" />
<%@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>