Come convertire BufferedImage di immagine da visualizzare sul JSP
-
19-09-2019 - |
Domanda
Vorrei convertire BufferedImage
ad un'immagine che verrà visualizzata sulla pagina JSP. Come posso raggiungere questo obiettivo?
Soluzione
In primo luogo, JSP è una tecnologia che fornisce un modello di vista di scrivere codice HTML / CSS / JS e la capacità di interagire con il codice Java back-end per controllare i dati di flusso della pagina e l'accesso di back-end. Il tuo problema è più in HTML.
Ora, per visualizzare un'immagine in una pagina HTML, è necessario l'elemento <img>
HTML. Per definire / allocare un'immagine, devi solo lasciare che il punto di attributo src
a un URL. Per es.
<img src="url/to/image.jpg">
(che può essere sia rispetto al contesto attuale, o un URL assoluto, ad esempio iniziando con http://
)
Se l'immagine è dinamico, come nel tuo caso, è necessario disporre di un Servlet
in ascolto sul url-pattern
corrispondenza l'URL dell'immagine. Per es.
<img src="imageservlet/image.jpg">
(qui la servlet è ovviamente da mappare sulla /imageservlet/*
e l'identificatore immagine, qui il nome, è qui disponibile da request.getPathInfo()
)
Il <img src>
sparerà una richiesta GET, quindi devi solo implementare il metodo doGet()
del servlet. Per inviare una risposta HTTP tutto quello che dovete fare è scrivere alcuni contenuti al OutputStream
della risposta, insieme ad una serie di intestazioni di risposta che rappresentano il contenuto (Content-Type
, Content-Length
e / o Content-disposition
). È possibile utilizzare ImageIO#write()
per scrivere la BufferedImage
a un OutputStream
.
Si può trovare un esempio di base di un tale servlet un'immagine qui . Basta sostituire Files#copy()
con ImageIO#write()
.
response.setContentType("image/png");
ImageIO.write(bufferedImage, "png", response.getOutputStream());
Vedi anche:
Altri suggerimenti
Non è necessario convertire i BufferedImage
per Image
per visualizzarlo sul jsp pagina. Perché, Java 6 JAXB fornisce javax.xml.bind.DatatypeConverter.printBase64Binary(byte[]) String
convertire byte [] per base 64 stringa . base 64 stringa possono essere visualizzati utilizzando il <img
html tag specificando i dati di origine come base 64
cioè src="data:image/jpg
;. Ecco il programma di esempio di cui da questo postare .
sample.jsp (test superato):
<%@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, questo approccio è perfetto per le immagini di piccole dimensioni come <img src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" width="200" alt="thumbnail" height="200">
. In caso contrario, utilizzando URL diretto dell'immagine andrà bene in attributo src
ad esempio: - <img src="uri-of-image/profile-pic.jpg" width="600" alt="No Profie Pic" height="600">