Java图片验证码

Posted 那个谁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

结束!

以上是关于Java图片验证码的主要内容,如果未能解决你的问题,请参考以下文章

java实现一个验证码图片的功能

java 模拟登陆带验证码的网页,就想知道怎么将验证码以图片的形式下载到本地。。。。。

Java Web 一次性验证码的代码实现

Java实现超简单验证码识别

java以图片形式输出显示验证码

原创干货 | Java代码审计之图形验证码模块