java生成图片验证码

/**

  • 获取验证码图片
  • @author

/
@Controller
public class GenerateImg {
/
获取验证码图片*/

@RequestMapping("/getVerifyCode")

public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) throws IOException {

          try {

                   int width=176;

                   int height=44;
                 //生成对应宽高的初始图片
                   BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);


	//单独的一个类方法,出于代码复用考虑,进行了封装。
     //功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符             
      String randomText = VerifyCode.drawRandomText(width,height,verifyImg);

		//保存到Key到session
		request.getSession().setAttribute("verifyCode", randomText);

          response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别

        OutputStream os = response.getOutputStream(); //获取文件输出流    

        ImageIO.write(verifyImg,"png",os);//输出图片流
        //ImageIO.write(verifyImg,"png", new File("d:/测试.jpg"));//保存本地测试
        os.flush();

        os.close();//关闭流

          } catch (IOException e) {

                   this.LOGGER.error(e.getMessage());

                   e.printStackTrace();

          }


}

}

public class VerifyCode {

public static  String drawRandomText(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, 30));

//数字和字母的组合

String baseNumLetter= “123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”;

StringBuffer sBuffer = new StringBuffer();

int x = 5; //旋转原点的 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, 30);

   graphics.drawString(ch, x, 30);

   //反向旋转

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

   x += 30;

}

//画干扰线

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 Color getRandomColor() {

Random ran = new Random();

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

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

return color;

}

}
返回在这里插入图片描述
返回的验证图片

js:
function getRandomString() {

	        var src = ctx+"/getVerifyCode.do?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
	        
	        $('.verifyCode').attr("src",src);      
	        
	    }

html:
在这里插入图片描述
—src里填控制器路径
—刷新按钮

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无悔_人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值