java基础练习:图片验证码

一.实现效果

 生成数字,字母随机整合并含有随机位置的10条干扰线组成的图片存放在指定目录中,会随着程序的每一次运行而刷新.

二.具体代码

package cn.tx.demo1;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;

public class ImageCode {
    //数组 没有0  1  o  非常类似 容易对用户产生影响,影像体验感  细节
    static String[] strs={"a","b","c","d","e","f","g","h","i","j","k","m","n","p","q","r","s","t",
    "u","v","w","x","y","z","2","3","4","5","6","7","8","9"};
    public static void main(String[] args) throws Exception{
        //大的需求:通过java代码方式生成图片(图片上含有字母或者数字或者干扰线)
        //例如画画
        /**
         * 1.画板 纸
         * 2.准备画笔
         * 3.准备数据,随机获取四个
         * 4.通过画笔吧获取数据划到画板上
         * 5.生成一张真正的图片
         **/
         //定义图片的宽度和高度
        int w=150;
        int h=50;
        //图片的类型  下为常量写法,也可写成 Int imageType =1;
        int imageType=BufferedImage.TYPE_INT_RGB;
         //1.画板,纸  JDK中,提供一个画板的类  ctrl+p 快捷查看方法参数
        BufferedImage image=new BufferedImage(w,h,imageType);
         // 大的需求:把图片颜色修改
        //先获取画笔对象
        Graphics g=image.getGraphics();
        //给画笔设置颜色
        g.setColor(Color.yellow);
        //画一个填充矩(实心的)矩形
        g.fillRect(0,0,w,h);

        //准备数据,随机取出4个
        //编写for循环,循环4次
        //再重新设置颜色
        g.setColor(Color.red);
        //设置一个字体
        g.setFont(new Font("楷体",Font.PLAIN,25));
        //使用Random类
        Random random=new Random();
        int x=25;
        int y=25;
        for (int i = 0; i < 4; i++) {
            //每循环一次,取一个
            //num值应该是随机生成的
            //生成一个随机数字  按数组长度取
            int num= random.nextInt(strs.length);
            String str=strs[num];
            //每获取一个字符串,画上去
            g.drawString(str,x,y);
            //每画一次,把x值变大
            x +=25;
        }
        g.setColor(Color.GREEN);
        //循环十次画10个上去
        for (int i = 0; i < 10; i++) {
            int x1=random.nextInt(30);
            int y1=random.nextInt(50);
            int x2=random.nextInt(30)+120;
            //原取29,现取149,第二个点永远在右侧
            int y2=random.nextInt(50);
            //画一点干扰线
            g.drawLine(x1,y1,x2,y2);
        }



        //5.把image生成到本地的磁盘上
        ImageIO.write(image,"jpg",new File("E:\\test2\\aaa.jpg"));

}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值