Domanda

Vorrei convertire BufferedImage ad un'immagine che verrà visualizzata sulla pagina JSP. Come posso raggiungere questo obiettivo?

È stato utile?

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">

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top