Java生成图形验证码

简介: 要看懂代码,先搞懂这些方法

先看效果


image.png

要看懂代码,先搞懂这些方法

Image类

Image 类并不可以直接构建图片对象,因为它是一个抽象类。

我们通过 BufferedImage 方法来构造

BufferedImage(int width,int height,int imgeType)


创建指定大小、指定图像类型的 BufferedImage对象。

BufferedImage 构建好指定大小和类型的图像对象后,我们用Java提供的画笔工具

Graphics2D pen = (Graphics2D) image.getGraphics();


有了画笔就开始画呗

pen.setColor(Color.RED) 这个方法是给画笔上色的

pen.fillRect(0,0,80,20) 这个方法是给我们构造的矩形图片填充颜色用的,颜色就是刚刚画笔的颜色,参数是指从坐标(0,0)填充到(80,20)

pen.drawString(String str) 这个方法是用画笔画一个字符串,在后面我们的验证码的数字或字母就是这个方法画上去的

ImageIO

画好图片得存起来,我们通过ImageIO来写到磁盘中去

write(image,"jpg",new FileOutputStream("D:/b.jpg")) 这个方法就是把二进制字节文件写到磁盘中去,注意计算机中除了文本是字符文件,其他都是二进制文件。参数:image就是我们刚刚那个BufferedImage的实例化对象,jpg是我们将要保存的格式,new FileOutPutStream("D:/b.jpg")就是标准的字节输出流,参数"D:/b.jpg"就是我们的二进制文件将要写到的位置

到此为止,我们生成了我们的图片文件,下一步,怎么让Java读取到我们的文件呢?

new FileInputStream(path)

二进制输入流,用于读取二进制文件

Image


上面我们说Image不能够创建图片实例,但是它可以通过参数-字节输入流来实例化Image对象

new Image(inStream) 通过这个方法实例化Image对象,其中参数inStream是上面FileInputStream字节输入流的实例化对象。

ImageView


这个方法用于JavaFX设置图片时,存放Image参数

new ImageView(image) 我们实例化ImageView对象,参数是上面Image的实例化对象

setGraphic(ImageView imageView) 这个方法就是我们最后给组件设置图片的方法,参数就是上面的ImageView的实例化对象


代码

/**
     * 生成验证码图片
     */
     public static String createImage(){
        //绘制验证码
        //在内存中创建图片
        BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D pen = (Graphics2D) image.getGraphics(); //画笔
        //设置图片的背景颜色
        pen.setColor(Color.WHITE);
        pen.fillRect(0,0,80,20);//填充背景,从(0,0)到(80,20)
        //给图片写数据
        pen.setColor(Color.BLUE);
        pen.setFont(new Font(null,Font.BOLD,20));
        //pen.drawString(makeNum(),0,20);//数字验证码
        String code=createCode(5);//字母验证码,参数是验证码的长度
        pen.drawString(code,0,20);
        try {
            ImageIO.write(image, "jpg", new FileOutputStream("D:/b.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return code;
    }
/**
     * 返回英文验证码(包含大小写)
     * @param len 期望的验证码长度
     * @return 返回验证码
     */
    public static String createCode(int len){
        StringBuilder result=new StringBuilder();
        char[] words=new char[len];
        for (int i = 0; i < len; i++) {
            int code=0;
            //大小写字母都有出现的概率
            if((int)(Math.random()*i%2)==0)//得到大写字母
                code=(int)(Math.random()*26+65);
            else//得到小写字母
                code=(int)(Math.random()*26+97);
            words[i]=(char)code;
        }
        //将生成的字母拼接成字符串返回
        for(char word:words){
            result.append(word);
        }
        return String.valueOf(result);
    }


相关文章
|
2月前
|
Java
java实现动态验证码源代码——绘制验证码的jsp
java实现动态验证码源代码——绘制验证码的jsp
13 0
|
2月前
|
前端开发 Java
java实现动态验证码源代码——jsp页面
java实现动态验证码源代码——jsp页面
14 0
|
2月前
|
Java 机器人 网络安全
Java代码快速生成验证码
Java代码快速生成验证码
40 0
|
2月前
|
JavaScript Java
java生成验证码并进行验证
java生成验证码并进行验证
27 2
|
2月前
|
数据采集 JavaScript 前端开发
使用Java解决快手滑块验证码
使用Java解决快手滑块验证码
|
4月前
|
JavaScript 小程序 Java
基于Java的养老院管理系统的设计与实现(亮点:多角色、登录验证码、留言反馈)
基于Java的养老院管理系统的设计与实现(亮点:多角色、登录验证码、留言反馈)
24 0
|
4月前
|
数据采集 安全 前端开发
Java制作数字加减法验证码
Java制作数字加减法验证码
39 0
|
4月前
|
数据采集 安全 前端开发
Java如何制作图片输入验证码
Java如何制作图片输入验证码
13 0
|
5月前
|
缓存 算法 Java
Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享
Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享
35 0
|
7月前
|
Java
Java生成图形验证码
Java生成图形验证码
315 3