2022-07-26:登陆简单的验证码生成

/*对图片进行处理的类和方法*/

public static StringdrawRandomText(int width, int height, BufferedImage verifyImg) {

Graphics2D graphics = (Graphics2D) verifyImg.getGraphics();

    graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色

    graphics.fillRect(0, 0, width, height);//填充背景

    graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));

    //数字和字母的组合

    String baseNumLetter ="123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";

    StringBuffer sBuffer =new StringBuffer();

    int x =10;  //旋转原点的 x 坐标

    String ch ="";

    Random random =new Random();

    for (int i =0; i <4; i++) {

graphics.setColor(getRandomColor());

        //设置字体旋转角度

        int degree = random.nextInt() %30;  //角度小于30度

        int dot = random.nextInt(baseNumLetter.length());

        ch = baseNumLetter.charAt(dot) +"";

        sBuffer.append(ch);

        //正向旋转

        graphics.rotate(degree * Math.PI /180, x, 45);

        graphics.drawString(ch, x, 45);

        //反向旋转

        graphics.rotate(-degree * Math.PI /180, x, 45);

        x +=48;

    }

//画干扰线

    for (int i =0; i <6; i++) {

// 设置随机颜色

        graphics.setColor(getRandomColor());

        // 随机画线

        graphics.drawLine(random.nextInt(width), random.nextInt(height),

                random.nextInt(width), random.nextInt(height));

    }

//添加噪点

    for (int i =0; i <30; i++) {

int x1 = random.nextInt(width);

        int y1 = random.nextInt(height);

        graphics.setColor(getRandomColor());

        graphics.fillRect(x1, y1, 2, 2);

    }

return sBuffer.toString();

}

/**

* 随机取色

*/

private static ColorgetRandomColor() {

Random ran =new Random();

    Color color =new Color(ran.nextInt(256),

            ran.nextInt(256), ran.nextInt(256));

    return color;

}



以上工具类,是生成噪点,干扰线等,可以直接粘贴到类中


@RequestMapping("getQrcode")

public void getQrcode(HttpServletRequest request, HttpServletResponse response) {

定义宽高和image对象

BufferedImage verifyImg=new BufferedImage(200,100,BufferedImage.TYPE_INT_RGB);

    生成正确的验证码数字

    String qrcodenumber = CodeUtil.drawRandomText(200, 100, verifyImg);

    存到session以方便登陆时候验证

    request.getSession().setAttribute("qrcodenumber",qrcodenumber);

    设置返回到前端的格式

    response.setContentType("image/png");

    try {

OutputStream outputStream = response.getOutputStream();

    写入

        ImageIO.write(verifyImg,"png",outputStream);

    }catch (IOException e) {

throw new BusinessException(BusinessStatus.FAIL,"IO异常");

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容