• 图片验证码


    1.今天从网上找了一个图片验证码的例子,很好,看代码

    package com.zhao.util;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class AuthImg extends HttpServlet
    {
        private Font mFont = new Font("Arial Black", Font.BOLD, 16);//字体,风格,字号
        public void init() throws ServletException
        {
            super.init();//applet初始化,在applet首次创建时执行
        }
        Color getRandColor(int fc,int bc)//随机产生r,g,b均在fc和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);
        }
    
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            response.setHeader("Pragma","No-cache");
            response.setHeader("Cache-Control","no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");
            
            int width=100, height=150;
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
            
            Graphics g = image.getGraphics();
            Random random = new Random();
            g.setColor(getRandColor(200,250));
            g.fillRect(1, 1, width-1, height-1);
            g.setColor(new Color(102,102,102));
            g.drawRect(0, 0, width-1, height-1);//画矩形。左角坐标,宽,高
            g.setFont(mFont);
    
            g.setColor(getRandColor(160,200));
            for (int i=0;i<155;i++)
            {
                int x = random.nextInt(width - 1);
                int y = random.nextInt(height - 1);
                int xl = random.nextInt(6) + 1;
                int yl = random.nextInt(12) + 1;
                g.drawLine(x,y,x + xl,y + yl);//画直线起点坐标、终点坐标
            }
            for (int i = 0;i < 70;i++)
            {
                int x = random.nextInt(width - 1);
                int y = random.nextInt(height - 1);
                int xl = random.nextInt(12) + 1;
                int yl = random.nextInt(6) + 1;
                g.drawLine(x,y,x - xl,y - yl);
            }
    
            String sRand="";
            for (int i=0;i<6;i++)
            {
    			String tmp = getRandomChar();
                sRand += tmp;
                g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    	        g.drawString(tmp,15*i+10,15);//写文本tmp
            }
    
            HttpSession session = request.getSession(true);
            session.setAttribute("rand",sRand);
            g.dispose();
            ImageIO.write(image, "JPEG", response.getOutputStream());
        }
        private String getRandomChar()//产生文本
        {
    		int rand = (int)Math.round(Math.random() * 2);
    		long itmp = 0;
    		char ctmp = 'u0000';
    		switch (rand)
    		{
    			case 1:
    				itmp = Math.round(Math.random() * 25 + 65);
    				ctmp = (char)itmp;
    				return String.valueOf(ctmp);
    			case 2:
    				itmp = Math.round(Math.random() * 25 + 97);
    				ctmp = (char)itmp;
    				return String.valueOf(ctmp);
    			default :
    				itmp = Math.round(Math.random() * 9);
    				return String.valueOf(itmp);
    		}
        }
    }
    

    2.原作者给的步骤

    1.建立一个AuthImg类,用来生成验证码
    2.在web中配置AuthImg
      <servlet>
        <servlet-name>img</servlet-name>
        <servlet-class>com.zhao.util.AuthImg</class-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>img</servlet-name>
        <url-pattern>/authImg</url-pattern>
      </servlet-mapping>
    3.页面上:
     验证码如图:<img src="authImg" id="authImg"/>看不清?<a href="#" onClick="refresh()">单击此处刷新</a>
    <SCRIPT type="text/javascript" >
    			function refresh(){
    				document.getElementById("authImg").src='authImg?now='+new Date();
    			}
    		</SCRIPT>
    4.AuthImg.java
    

    3.截图(框框改的有点大)

  • 相关阅读:
    AI智能视频平台如何切换人脸识别算法?
    AI智能识别技术在明厨亮灶场景中的应用
    利用GO集成百度AI人脸识别算法的开发实践
    win10子系统中访问linux文件
    Go常用依赖注入框架需要注意的问题
    Go Struct相关问题
    基础数据层相关中间件
    MySql相关问题
    Github
    go windows交叉编译
  • 原文地址:https://www.cnblogs.com/feifeishi/p/6494870.html
Copyright © 2020-2023  润新知