JSP在生成BuffereImage后以html显示图像

JSP在生成BuffereImage后以html显示图像,jsp,bufferedimage,Jsp,Bufferedimage,我有一个java类从一个随机字符串生成一个图像,当我单独运行时,java代码运行良好,图像保存在本地目录中 现在我创建了一个用于注册的简单JSP表单,如何在html“alt=”image not found“/>中显示图像 java(单独运行良好,能够生成输出) 包转换; 导入java.awt.Color; 导入java.awt.Font; 导入java.awt.FontMetrics; 导入java.awt.Graphics2D; 导入java.awt.RenderingHints; 导入

我有一个java类从一个随机字符串生成一个图像,当我单独运行时,java代码运行良好,图像保存在本地目录中

现在我创建了一个用于注册的简单JSP表单,如何在html
“alt=”image not found“/>中显示图像

java(单独运行良好,能够生成输出)

包转换;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.FontMetrics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.image.buffereImage;
导入java.util.Random;
导入java.util.Scanner;
公共类引用{
专用最终整数字符串长度=10;
公共缓冲区映像stringToImage(){
//参考资料来源:http://stackoverflow.com/questions/18800717/convert-text-content-to-image
扫描仪阅读器=新扫描仪(System.in);
字符串imageText=“”;
对于(int count=0;count

生成图像并在jsp上显示的任何替代方法?

您可以在jsp中使用
。只要saved.png位于web应用程序上下文根目录中


另一种方法是创建一个servlet来处理动态图像生成(无需保存到硬盘)。然后在jsp中,您会将servlet引用为图像的src。

仔细阅读以下内容:@BalusC如果我理解正确-您反对将文件保存在上下文根目录中。但正如您所看到的,我建议改为使用servlet…但是如果作者保留原始设计(非正统或非正统)-否则他将如何显示他的图像。您的文件创建代码工作正常。但是,您创建了保存的.png文件,浏览器无法获取该文件。您在文件构造函数中使用了相对路径。根据API,该文件是在“调用Java虚拟机的目录”中创建的。在Tomcat中,即它的bin文件夹中。
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="convert.references"%>
<%@page import="java.io.*, java.util.*"%>
<html>
<head>
<title>Echoing HTML Request Parameters</title>
</head>
<body>  
<h3>Registering user...</h3>
<form method="get">
    Please enter your Username:
    <input type="text" name="username"/><br>
    Please enter your Email:
    <input type="text" name="email"><br>
    Please enter your Security Question:
    <input type="text" name="qn"><br>
    Please enter your Security Answer:
    <input type="text" name="ans"><br>
    Please enter your Recovery Password:
    <input type="password" name="pass"><br>    
    <input type="submit" value="Enter">
</form> 
<%
    String username = request.getParameter("username");
    String email = request.getParameter("email");
    String qn = request.getParameter("qn");
    String ans = request.getParameter("ans");
    String pass = request.getParameter("pass");

    if (username != null) {          
        references test = new references();
        BufferedImage image = test.stringToImage(); 
        File outputfile = new File("saved.png");
        ImageIO.write(image, "png", outputfile);
%>  
    <h3>Your details:</h3>
    <ul>
        <li><%= username %></li>
        <li><%= email %></li>
        <li><%= qn %></li>
        <li><%= ans %></li>
        <li><%= pass %></li>
        <li><img src="<%= outputfile%>" alt="Image not found" /></li>
    </ul>
    <a href="<%= request.getRequestURI() %>">BACK</a>
<%
}
%>
</body>
</html>
package convert;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.util.Scanner;

public class references {

    private final int stringLength = 10;

    public BufferedImage stringToImage(){
            //reference from: http://stackoverflow.com/questions/18800717/convert-text-content-to-image
            Scanner reader = new Scanner(System.in);            
            String imageText = "";
            for(int count = 0; count < stringLength; count++){                      //consisting of 8 value
                Random rand = new Random();                                         //randomly selected
                int randomNumber = rand.nextInt(10);                                //of 1-9
                imageText += randomNumber;                                          //one number at a time for 8 times
            }
            BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = img.createGraphics();
            Font font = new Font("Arial", Font.PLAIN, 48);
            g2d.setFont(font);
            FontMetrics fm = g2d.getFontMetrics();
            int width = fm.stringWidth(imageText);
            int height = fm.getHeight();
            g2d.dispose();

            img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            g2d = img.createGraphics();
            g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
            g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
            g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
            g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
            g2d.setFont(font);
            fm = g2d.getFontMetrics();
            g2d.setColor(Color.BLACK);
            g2d.drawString(imageText, 0, fm.getAscent());
            g2d.dispose();
            /*try{
                File outputfile = new File("saved.png");
                ImageIO.write(img, "png", outputfile);
            } catch (IOException e) {}*/
            return img;
        }
}