Java生成图形验证码

先看效果

在这里插入图片描述

要看懂代码,先搞懂这些方法
  1. Image类

    • Image 类并不可以直接构建图片对象,因为它是一个抽象类。
    • 我们通过 BufferedImage 方法来构造
  2. BufferedImage(int width,int height,int imgeType)

    • 创建指定大小、指定图像类型的 BufferedImage对象。
    • BufferedImage 构建好指定大小和类型的图像对象后,我们用Java提供的画笔工具
  3. Graphics2D pen = (Graphics2D) image.getGraphics();

    • 有了画笔就开始画呗
    • pen.setColor(Color.RED) 这个方法是给画笔上色的
    • pen.fillRect(0,0,80,20) 这个方法是给我们构造的矩形图片填充颜色用的,颜色就是刚刚画笔的颜色,参数是指从坐标(0,0)填充到(80,20)
    • pen.drawString(String str) 这个方法是用画笔画一个字符串,在后面我们的验证码的数字或字母就是这个方法画上去的
  4. ImageIO

    • 画好图片得存起来,我们通过ImageIO来写到磁盘中去
    • write(image,"jpg",new FileOutputStream("D:/b.jpg")) 这个方法就是把二进制字节文件写到磁盘中去,注意计算机中除了文本是字符文件,其他都是二进制文件。参数:image就是我们刚刚那个BufferedImage的实例化对象,jpg是我们将要保存的格式,new FileOutPutStream("D:/b.jpg")就是标准的字节输出流,参数"D:/b.jpg"就是我们的二进制文件将要写到的位置
到此为止,我们生成了我们的图片文件,下一步,怎么让Java读取到我们的文件呢?
  1. new FileInputStream(path)

    • 二进制输入流,用于读取二进制文件
  2. Image

    • 上面我们说Image不能够创建图片实例,但是它可以通过参数-字节输入流来实例化Image对象
    • new Image(inStream) 通过这个方法实例化Image对象,其中参数inStream是上面FileInputStream字节输入流的实例化对象。
  3. ImageView

    • 这个方法用于JavaFX设置图片时,存放Image参数
    • new ImageView(image) 我们实例化ImageView对象,参数是上面Image的实例化对象
  4. 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);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让线程再跑一会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值