• Servlet 输出图片验证码


    package com.qad.jpg;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;

    import javax.servlet.ServletException;  
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;

    public class IdentityServlet extends HttpServlet{
    //不包含'0','o','i','1'等不容易辨认的字符
    public static final char[] chars={'2','3','4','5','6','7','8','9'
    ,'A','B','C','D','E','F','G','H','J','K','L','M','N'
    ,'P','Q','R','S','T','U','V','W','X','Y','Z'};
    //生成随机数
    public static Random random = new Random();
    //获取随机数
    public static String getRandomString(){
    //字符串缓存
    StringBuffer buffer = new StringBuffer();
    //循环六次,每次随机取一个字符
    for(int i = 0;i < 6; i++){
    buffer.append(chars[random.nextInt(chars.length)]);
    }
    return buffer.toString();
    }
    //获取随机的颜色
    public static Color getRandomColor(){
    return new Color(random.nextInt(255),random.nextInt(255)
    ,random.nextInt(255));
    }
    //返回某颜色的反色
    public static Color getReverseColor(Color c){
    return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
    }
    //GET方法
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
    //设置输出类型为jpeg格式
    response.setContentType("image/jpeg");
    //获取随机字符串
    String randomString = getRandomString();
    //将获取的随机字符串放到session中
    request.getSession(true).setAttribute("randomString", randomString);
    int width = 100;//设置图片宽度
    int height = 30;//设置图片高度
    //获取随机颜色,用于背景色
    Color color = getRandomColor();
    //获取反色,用于前景色
    Color reverse = getReverseColor(color);
    //创建一个彩色图片
    BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();//获取绘图对象
    g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体
    g.setColor(color);//设置颜色
    g.fillRect(0, 0, width, height);//绘制背景
    g.setColor(reverse);//设置颜色
    g.drawString(randomString, 18, 20);//绘制随机字符
    //画噪点,最多100个
    for (int i = 0,n=random.nextInt(100);i<n;i++){
    g.drawRect(random.nextInt(width),random.nextInt(height), 1, 1);//随机噪音点
    }
    ServletOutputStream out = response.getOutputStream();
    //转成jpeg格式
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(bi);
    out.flush();
    }

    }

  • 相关阅读:
    Bozh 的技术博客 梦想成为Gnu/Linux | Unix后台架构师 | Read the fucking source code
    Welcome to the TANGO website
    repowatcher : about
    PyTango documentation — PyTango 8.0.2 documentation
    Visual Studio 2010旗舰版正式版序列号 civilman的专栏 博客频道 CSDN.NET
    BoostPro Binary Installer for Visual C++
    分享:httping 1.5.6 发布,HTTP 诊断工具
    浅析epoll – epoll函数深入讲解 C++爱好者博客
    分享:Jython动态加载Jar
    News BoostPro Computing BoostPro
  • 原文地址:https://www.cnblogs.com/qadyyj/p/5505097.html
Copyright © 2020-2023  润新知