public class getImg extends HttpServlet { //处理post public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { HttpSession session=request.getSession(true); response.setContentType("image/gif"); ServletOutputStream out1=response.getOutputStream(); //在内存中创建图象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 //g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Monotype Corsiva",Font.BOLD,18)); //画边框 g.setColor(Color.BLACK); g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 // g.setColor(getRandColor(160,200)); // for (int i=0;i<155;i++) // { // int x = random.nextInt(width); // int y = random.nextInt(height); // int xl = random.nextInt(12); // int yl = random.nextInt(12); // g.drawLine(x,y,x+xl,y+yl); // } // 取随机产生的认证码(4位数字) String sRand=""; for (int i=0;i<4;i++){ String rand=String.valueOf(random.nextInt(10)); sRand+=rand; // 将认证码显示到图象中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 if(i%2==0){ g.drawString(rand,13*i+6,16+2); }else{ g.drawString(rand,13*i+6,16-2); } } session.setAttribute("validateCode",sRand);//对session赋值 JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out1); encoder.encode(image); out1.close(); } Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } }
<img src="<%=request.getContextPath()%>/getImg" >
(个人笔记)生成验证码
最新推荐文章于 2022-06-21 21:26:28 发布