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);
    }


相关文章
|
1月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
241 5
|
3月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
2983 2
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
5月前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
63 1
|
10月前
|
JavaScript Java
java生成验证码并进行验证
java生成验证码并进行验证
|
9月前
|
Java 数据安全/隐私保护
利用Java图形化界面组件Swing写一个简易的登录界面
利用Java图形化界面组件Swing写一个简易的登录界面
129 1
|
10月前
|
Java
JAVA生产随机生成验证码
Java代码实现随机生成指定位数的数字、大小写字母混合的验证码。使用`Random`类生成类型(0-数字,1-大写字母,2-小写字母),然后根据类型转换为相应字符。示例代码展示了一个4位验证码的生成,并附有实现结果图和过程分析。
268 2
|
8月前
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
234 0
|
9月前
|
存储 NoSQL Java
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
160 0
|
9月前
|
前端开发 Java UED
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
|
9月前
|
数据可视化 前端开发 Java
Java中的图形用户界面开发
Java中的图形用户界面开发