java 验证码_如何使用Java生成随机验证码

我们想想,如何用Java绘制图片呢?

第一步 寻找☞ 纸画画要纸的

第二步 寻找笔 画画当然也要笔

ca8fdb3e3b184ab46ee999de668ac3fa.png

在开始之前,我们需要用到几个主要的类

  • BufferedImage 用来缓寸你画的东西
  • Random 随机验证码,肯定要随机
  • Font 字体随机才能扭曲
  • Color 颜色表示也要随机
  • ImageIO 保存图片
39f7c13d440848726e70b9aaf4e0dcac.png

恭喜,你已经完成一半啦

我们现在开始了

建一个类名字叫RandomCode

(其实你开心的话,叫什么都可以)

里面包括以下几个成员变量:

BufferedImage image = null;//用来缓存图片(在运行内存中)Graphics2D gd = null;//画笔的2D形式Random random = null;//随机数生成的类StringBuffer charBuff = new StringBuffer();//存12345...90abc...xyzABC...XYZ,用来随机取字符ArrayList stringBuff = new ArrayList();//字体列表,等下在方法中随机取一个字体ArrayList colorBuff = new ArrayList();//颜色列表,等下在方法中随机取一个颜色StringBuffer text = new StringBuffer();//随机生成的文本

里面包括以下几个成员方法:

//此类的构造方法,构造出画步,得到2D画笔,初始化出所有的字符颜色字体。public RandomCode(){ random = new Random(); image = new BufferedImage(160,40,BufferedImage.TYPE_INT_RGB); gd = (Graphics2D)image.getGraphics(); this.Init(); } //初始化出所有的字符颜色字体 private void Init(){ charBuff.append("1234567890"); charBuff.append("abcdefghigklmpqrstuvwxyz"); charBuff.append("ABCDEFGHIGKLMPQRSTUVWXYZ"); stringBuff.add("幼圆"); stringBuff.add("宋体"); stringBuff.add("华文琥珀"); stringBuff.add("华文行楷"); stringBuff.add("华文隶书"); colorBuff.add(Color.RED); colorBuff.add(Color.BLACK); colorBuff.add(Color.BLUE); colorBuff.add(Color.GREEN); colorBuff.add(Color.PINK); } //获取一个随机的整数,然后在通过索引获取一个所及字符 public char getRandomChar(){ int rand = random.nextInt(58); return charBuff.charAt(rand); } //获取一个随机字体 public String getRandomFont(){ int rand = random.nextInt(stringBuff.size()); return stringBuff.get(rand); } //获取一个随机颜色 public Color getRandomColor(){ int rand = random.nextInt(colorBuff.size()); return colorBuff.get(rand); }//绘制随机二维码 public void drowImage(){ gd.setColor(Color.WHITE); gd.fillRect(0, 0, image.getWidth(), image.getHeight());//用白色填充画布 for (int i = 0; i < 4; i++) {//循环四次画四个随机字符 gd.setColor(getRandomColor());设置画笔颜色,颜色为随机获取 gd.setFont(new Font(getRandomFont(), Font.BOLD, image.getHeight()));//设置随机字体 char rand = getRandomChar();text.append(rand);//获取一个随机字符,然后保存起来,以便之后获取 gd.drawString(String.valueOf(rand), i*image.getHeight(), image.getHeight()-12); //绘制字符串 注:String.valueOf(char) 是将字符转换为字符串。 } for (int i = 0; i < random.nextInt(2)+1; i++) {//随机画1~2跟干扰线 gd.setColor(getRandomColor()); gd.drawLine(0, random.nextInt(image.getHeight()), image.getWidth(), random.nextInt(image.getHeight())); } } //讲图片保存到传入的路径 public void output(String imagePath){ try { ImageIO.write(image, "JPEG
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值