java以图片形式输出显示验证码

废话不多说,直接上代码,相关注释都在代码里给了注释了,还有不清楚的可以自己查一下,毕竟比较简单嘛

    public void generate(HttpServletResponse response,HttpSession session){
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        String code = drawImg(output);

    //    Subject currentUser = SecurityUtils.getSubject();
        //Session session = currentUser.getSession();
        session.setAttribute(Const.SESSION_SECURITY_CODE, code);
        try {
            ServletOutputStream out = response.getOutputStream();
            //将此字节数组输出流的全部内容写入到指定的输出流参数中。
            output.writeTo(out);
            out.close();
        } catch (IOException e) {
            //e.printStackTrace();
        }
    }

    private String drawImg(ByteArrayOutputStream output){
        String code = "";
        for(int i=0; i<4; i++){
            code += randomChar();
        }
        int width = 70;
        int height = 25;
        //设置图片的宽度,高度,以及类型
        BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
        //设置所显示的字体
        Font font = new Font("Times New Roman",Font.PLAIN,20);
        //创建一个Graphics2D,可用于绘制到BufferedImage
        Graphics2D g = bi.createGraphics();
        g.setFont(font); //将字体设置进去
        Color color = new Color(66,2,82);  //设置颜色
        g.setColor(color);
        g.setBackground(new Color(226,226,240));  //设置背景颜色
        g.clearRect(0, 0, width, height);
        FontRenderContext context = g.getFontRenderContext();  //将其以文本显示
        Rectangle2D bounds = font.getStringBounds(code, context);
        double x = (width - bounds.getWidth()) / 2;
        double y = (height - bounds.getHeight()) / 2;
        double ascent = bounds.getY();
        double baseY = y - ascent;
        g.drawString(code, (int)x, (int)baseY);  //输出图片的内容以及高度和宽度
        g.dispose();
        try {
            ImageIO.write(bi, "jpg", output);
        } catch (IOException e) {
            //e.printStackTrace();
        }
        return code;
    }

    private char randomChar(){
        Random r = new Random();
        String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
        return s.charAt(r.nextInt(s.length()));
    }

原文地址:https://www.cnblogs.com/xuanshao/p/10429452.html

时间: 2024-10-11 04:15:18

java以图片形式输出显示验证码的相关文章

请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出

有些时候需要将二进制图片字节在发送浏览器以图片形式显示: 下面是一些示例代码: 控制器: 1 /// <summary> 2 /// 将图片的二进制字节字符串在视图页面以图片形式输出 3 /// </summary> 4 public class HomeController : Controller 5 { 6 7 public ActionResult Test() 8 { 9 return View(); 10 } 11 12 //方法一: 13 public FileRes

将图片的二进制字节字符串在HTML页面以图片形式输出

具体实现代码如下: 1.新建一个一般处理程序: Image.ashx 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Net; 6 using System.Drawing.Imaging; 7 using System.IO; 8 9 namespace Test 10 { 11 /// <summary> 12 ///测试图

输出随机验证码图片

1 /** 2 * //输出随机验证码图片:CAPTCHA图像 3 */ 4 public class ServletDemo1 extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx

java实现图片验证码

一.验证码生成类 1 package hbi.tech.utils; 2 import javax.imageio.ImageIO; 3 import java.awt.*; 4 import java.awt.image.BufferedImage; 5 import java.io.ByteArrayInputStream; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.Ou

修ecshop品牌筛选以LOGO图片形式显示

如何实现商品列表页属性筛选区品牌筛选以LOGO形式展示,最模板总结ecshop/'>ecshop教程入下: 1.修改 category.php 文件,将(大概215行) $sql = "SELECT b.brand_id,b.brand_logo, b.brand_name, COUNT(*) AS goods_num ". 在(大概227行) $brands[$temp_key]['brand_name'] = $val['brand_name']; 下面增加 $brands[

软件测试第二次作业 - 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。

题目一: 1. 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示.(单词之间用空格隔开,如“Hello World My First Unit Test”): 2. 编写单元测试进行测试: 3. 用ElcEmma查看代码覆盖率,要求覆盖率达到100%. Demo类: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.

java实现图片验证码登陆

java实现图片验证码登陆 话不多说 直接上图 ↓↓↓↓↓↓↓↓↓↓ 成果图 ↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓ 差不多这就是演示图啦 如需源码请联系QQ:11234013 可手把手讲解知识点 原文地址:https://www.cnblogs.com/zhetiankj/p/12641439.html

我爱Java系列---【SpringMVC传统方式的文件上传和前端获取数据库图片在页面显示】

一.文件上传 说明:传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上.并且上传完成之后,浏览器可能跳转. 1. 第一步:创建 maven 工程并导入 commons-fileupload 坐标 1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version&g

用struts2做一个带有图片效果的登陆验证码

我们在登陆网站的时候总是会有带有图片验证功能的验证码,它是怎么做出来的了,今天我就详细的将每一步步骤写出来. 1.在action层 1 package cn.itcast.javaee.js.checkcode; 2 3 import java.io.PrintWriter; 4 import javax.servlet.http.HttpServletResponse; 5 import org.apache.struts2.ServletActionContext; 6 import com