java随机验证码 写入输出流中

详细讲解步骤
1.生成随机验证码random
2.准备画布 缓存图片 BufferedImage() img=new BufferedImage(width,height,类型);
3.准备画笔 Graphisc g=img.getGraphsic();//画笔是画布中获取到的
4.画一个矩形用来装验证码 g.fillRact(00,0,宽,高);//前面两个0是矩形在画布上的坐标
5.画干扰线 g.drawLine()
6.画验证码 设置画笔(每画一次改变一次画笔颜色)颜色,文字字体
一个一个画验证码 for g.drawString(""+code.charAt(i),x,y)//因为是画字符串所以加“”变成字符串,后面的x,y是坐标
7.准备流将画布展示 以流的形式输出
FileOutPutStream fop=new FileOutPutStream(“code.png”);//抛异常是因为这个图片
ImgeIO.write(img,“png”,fop)//画布 图片类型 流类型
PS(如果是前端就用response.getOutPutStream())
最后将文件流关闭
完整代码:

package yanzhengma;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Random;
public class Test {
    public static void main(String[] args) throws Exception {
        //验证码范围
        char[] cs={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
                'U', 'V', 'W', 'X', 'Y', 'Z'};
        String code="";
        Random r=new Random();
        //四位随机验证码
        for (int i = 0; i < 4; i++) {
            //从数组中随机索引
            code+=cs[r.nextInt(cs.length)];
        }
        System.out.println(code);
        //开始画图
        //设置宽高
        int width=100;
        int height=50;
        //定义画布 准备画笔 宽高 图片类型 BufferedImage.TYPE_INT_RGB
        BufferedImage img=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g=img.getGraphics();
        //设置颜色 color.decode() 十六进制颜色码
        g.setColor(Color.decode("#cccccc"));
        //画背景 填充一个矩形 从0,0开始填满
        g.fillRect(0,0,width,height);
        //画干扰线
        g.setColor(Color.GRAY);
        //循环划线
        for (int i = 0; i < 8; i++) {
            g.drawLine(r.nextInt(width),
                       r.nextInt(height),
                       r.nextInt(width),
                       r.nextInt(height)
                    );

        }
    //画文字
        //设置画验证码颜色 和字体
        g.setColor(Color.BLACK);
        //设置字体 样式 加粗|斜体 大小
        g.setFont(new Font("Arial",Font.BOLD|Font.ITALIC,20));
        //g.drawString(code,20,30);
        //一个一个画
        for (int i = 0; i < code.length(); i++) {
            g.drawString(""+code.charAt(i),20*i+8,30);

        }

        //把图片给输出流
        //前端用response.getoutputStream()
        //用文件写 一个输出流
        FileOutputStream fos=new FileOutputStream("code.png");
        //保存一个文件  通过图像io对象向输出流中输出
        ImageIO.write(img,"png",fos);
        fos.close();

    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值