每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

一个简单的java验证码生成

//输出验证码
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;

@WebServlet("/check")
public class CheckCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;

        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        String code = CheckCodeImag.drawRandomText(width, height, image);

        req.getSession().setAttribute("checkCode",code);


        ServletOutputStream os = resp.getOutputStream();
        ImageIO.write(image, "jpg", os);
    }
}

//画验证码
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class CheckCodeImag {
    public static String drawRandomText(int width, int height, BufferedImage checkCodeImg){
        Graphics2D g = (Graphics2D) checkCodeImg.getGraphics();
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        StringBuffer code = new StringBuffer();
        int x=2;
        Random random = new Random();

        //画一个白色的验证码背景
        g.setColor(Color.WHITE);
        g.fillRect(0,0,width,height);

        //画干扰线
        for (int i = 0; i < 5; i++) {
            g.setColor(getRandomColor());
            g.drawLine(random.nextInt(width),random.nextInt(height),random.nextInt(width),random.nextInt(height));
        }
        //添加噪点
        for (int i = 0; i < 10; i++) {
            g.setColor(getRandomColor());
            g.fillRect(random.nextInt(width),random.nextInt(width),2,2);
        }


        //画上数字和字母
        g.setFont(new Font("Courier New Bold Italic",Font.BOLD,30));
        String str="123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
        for (int i = 1; i <=4; i++) {
            char c=str.charAt(random.nextInt(str.length()));
            code.append(c);
            g.setColor(getRandomColor());
            double angle=  random.nextInt()%30*Math.PI/180;
            g.rotate(angle,x,30);
            g.drawString(c+"",x,30);
            g.rotate(-angle,x,30);
            x+=25;
        }

        return code.toString();
    }

    private static Color getRandomColor(){
        Random random = new Random();
        return new Color(random.nextInt(160),random.nextInt(160),random.nextInt(160));
    }
}

posted @ 2020-10-31 09:11  雨下整夜~  阅读(137)  评论(0)    收藏  举报