zoukankan      html  css  js  c++  java
  • Java图片验证码

    Java图片验证码实际代码运用

    图像验证码的实现

    package com.ccw.utils;
    
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    
    public class ImageVerCodeUtil {
        /**
         * 创建图形验证码
         * @param width 绘制图片的宽度
         * @param height 绘制图片的高度
         * @return 返回map{"code":验证码,"image":创建的图像}
         */
        public static Map getVerificationCode(int width, int height){
            Random random = new Random();
            // 设置页面不缓存
            //response.setHeader("Pragma", "No-cache");
            //response.setHeader("Cache-Control", "no-cache");
            //response.setDateHeader("Expires", 0);
            // 在内存创建图像
            BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            // 获取图像上下文
            Graphics2D graphics = (Graphics2D) image.getGraphics();
            // 设置图像背景色
            graphics.setColor(new Color(220,220,220));//设置颜色
            graphics.fillRect(0,0,width,height);//填充衍射
    
            // 设定边框颜色
            // graphics.setColor(new Color(210,210,250));
            // graphics.drawRect(0,0,width - 1,height - 1);
            // 产生随机线条
            //创建一个供画笔选择线条粗细的对象
            BasicStroke bs = new BasicStroke(3,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND);
            graphics.setStroke(bs);
            for (int i=0;i<30;i++){
                graphics.setColor(new Color(random.nextInt(100)+150,random.nextInt(100)+150,random.nextInt(100)+150));
                int x = random.nextInt(width);
                int y = random.nextInt(height);
                int x1 = random.nextInt(width);
                int y1 = random.nextInt(height);
                graphics.drawLine(x,y,x1,y1);//画线
                int dx = random.nextInt(width);
                int dy = random.nextInt(height);
                graphics.drawLine(dx,dy,dx,dy);//画点
            }
            // 生产随机验证码
            String checkCode = String.valueOf(random.nextInt(8999)+1000);
            // 写入图像
            for (int i =0;i < checkCode.length();i++){
                graphics.setColor(new Color(random.nextInt(100)+70,random.nextInt(100)+70,random.nextInt(100)+70));
                graphics.setFont(new Font("Aria", Font.BOLD,24));
                // 设置随机旋转
                AffineTransform transform = new AffineTransform();
                transform.setToRotation((random.nextInt(3) - 1) * random.nextDouble(),(24 * i)+8,18);//(旋转角度,围绕坐标x,围绕坐标y)
                graphics.setTransform(transform);
                graphics.drawString(String.valueOf(checkCode.charAt(i)),(23 * i)+8,28);
            }
            // 输出图像
            graphics.dispose();
    
            Map<String,Object> map = new HashMap<>();
            map.put("code",checkCode);
            map.put("image",image);
    
            return map;
        }
    }

    结束!

  • 相关阅读:
    linux系统中批量对一类文件重命名
    hdu4751 Divide Groups
    tyvj1614 魔塔魔塔!
    noip2012 疫情控制
    黄学长模拟day1 大逃亡
    黄学长模拟day1 球的序列
    黄学长模拟day1 某种密码
    约瑟夫问题及其变形
    秦皇岛 I 题
    暴力搜索 + 剪枝
  • 原文地址:https://www.cnblogs.com/wccw/p/12983922.html
Copyright © 2011-2022 走看看