0
点赞
收藏
分享

微信扫一扫

随机生成JPEG格式的验证码图片

有点d伤 2022-05-05 阅读 183

前言

学习过程中遇到的小模块,总结细化了一下思维逻辑,供小白练习使用。

思维导图

代码

直接上代码:

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * @author :LiuYihong
 * @Description :随机生成验证码图片
 * @date : 2022/5/5 16:31
 * @Version 1.0
 */
@WebServlet("/random")
public class RandomServlet extends HttpServlet {
    private static final String TYPE = "image/jpeg";

    /**
     * 创建一个随机生成颜色的方法
     * @param bc
     * @param fc
     * @return
     */
    public static Color RandomColors(int bc,int fc){
        Random r = new Random();
        if(bc>255)bc=255;
        if(fc>255)fc=255;
        int red = fc+r.nextInt(bc-fc);
        int green = fc+r.nextInt(bc-fc);
        int blue = fc+r.nextInt(bc-fc);
        return new Color(red,green,blue);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置页面格式
        response.setContentType(TYPE);
        Random r = new Random();
        //2.设置页面不缓存
        response.setHeader( "Pragma", "no-cache" );
        response.addHeader( "Cache-Control", "no-cache" );
        response.setDateHeader("Expires", 0);
        //3.设置图片缓存
        BufferedImage pic = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
        //4.获取上下文环境
        Graphics gc = pic.getGraphics();
        //5.设置颜色
        gc.setColor(RandomColors(125,60));
        //6.设置矩形
        gc.fillRect(0,0,60,20);
        //7.设置字体(字体名称,样式,字号)
        gc.setFont(new Font("Times New Roma",Font.PLAIN,20));
        //8.设置干扰线
        for (int i=0;i<200;i++){
            int x1=r.nextInt(60);
            int x2=r.nextInt(30);
            int y1=r.nextInt(20);
            int y2=r.nextInt(10);
            gc.setColor(RandomColors(125,60));
            gc.drawLine(x1,y1,x2,y2);
        }
        //9.设置干扰点
        for (int i=0;i<100;i++){
            int x=r.nextInt(60);
            int y=r.nextInt(20);
            gc.setColor(RandomColors(125,60));
            gc.drawOval(x,y,0,0);
        }
        //10.设置随机四位数
        String z=r.nextInt(9000)+1000+"";
        gc.setColor(RandomColors(125,60));
        gc.drawString(z,10,16);//还有起始的坐标为参数
        gc.dispose();//释放环境
        //11.存session
        HttpSession session = request.getSession();
        session.setAttribute("",z);
        //12.输出到页面上
        ImageIO.write(pic,"JPEG",response.getOutputStream());
    }
}
举报

相关推荐

0 条评论