Wie BufferedImage zu Bild-Anzeige auf JSP konvertieren
-
19-09-2019 - |
Frage
Ich mag BufferedImage
in ein Bild konvertieren, die auf JSP-Seite angezeigt werden. Wie kann ich das erreichen?
Lösung
Als erstes ist JSP eine Ansicht, Technologie, um eine Vorlage zu schreiben HTML / CSS / JS in und die Möglichkeit bietet, mit Back-End-Java-Code zu Steuerseitenfluss und den Zugang Backend-Daten zu interagieren. Ihr Problem ist in HTML.
Nun, ein Bild in einer HTML-Seite anzuzeigen, benötigen Sie das HTML <img>
Element. So definieren / zuordnen ein Bild, müssen Sie nur noch das src
Attribut Punkt auf eine URL lassen. Z.
<img src="url/to/image.jpg">
(es kann entweder in Bezug auf den aktuellen Kontext sein, oder eine absolute URL, beispielsweise mit http://
ausgang)
Wenn das Bild dynamisch ist, wie in Ihrem Fall, benötigen Sie einen Servlet
haben, die auf dem url-pattern
hört Anpassung der Bild-URL. Z.
<img src="imageservlet/image.jpg">
(hier das Servlet offensichtlich auf /imageservlet/*
und die Bildkennung zugeordnet werden, hier den Dateinamen ist hier von request.getPathInfo()
)
Die <img src>
wird eine GET-Anforderung ausgelöst, so müssen Sie nur doGet()
Methode des Servlets implementieren. alles, was Sie tun müssen, um eine HTTP-Antwort zu senden ist einige Inhalte auf die OutputStream
der Antwort, zusammen mit einer Reihe von Response-Header, die den Inhalt (Content-Type
, Content-Length
und / oder Content-disposition
) zu schreiben. Sie können ImageIO#write()
eine BufferedImage
zu einem OutputStream
schreiben zu können.
Sie können ein einfaches Beispiel eines solchen Bildes finden Servlet hier . Sie müssen nur ersetzen Files#copy()
mit ImageIO#write()
.
response.setContentType("image/png");
ImageIO.write(bufferedImage, "png", response.getOutputStream());
Siehe auch:
Andere Tipps
Sie müssen nicht BufferedImage
zu Image
konvertieren, um sie anzuzeigen auf der jsp Seite. Da Java 6 JAXB bietet javax.xml.bind.DatatypeConverter.printBase64Binary(byte[]) String
zu konvertieren byte [] in zu Basis 64 Zeichenfolge . Die Basis 64 Zeichenkette kann mit dem <img
angezeigt HTML Tag durch die Quelldaten angibt, die als base 64
d.h. src="data:image/jpg
;. Hier ist das Beispielprogramm bezeichnet von diese Post .
sample.jsp (Test bestanden):
<%@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 ist dieser Ansatz perfekt für kleine Bilder wie <img src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" width="200" alt="thumbnail" height="200">
. Ansonsten direkte URL des Bildes unter Verwendung wird gut in src
Attribute zB: - <img src="uri-of-image/profile-pic.jpg" width="600" alt="No Profie Pic" height="600">