验证码

要点:
1.new一个BufferedImage
2.调用getGraphics()方法获得一个Graphics对象
3.再调用Graphics中的各种draw方法
4.若要实现缩放和旋转,则需把Graphics强转成 Graphics2D,然后调 Graphics2D中的rotate()方法和scale()方法
5.若要把验证码挂到网页上,则需要设置协议
resp.setContentType(“image/jpeg”); //1 ※※设置响应内容的类型为jpg图片

@Test
    public void demo1() throws IOException {
        BufferedImage img = new BufferedImage(60, 30,BufferedImage.TYPE_INT_RGB );
        Graphics g = img.getGraphics();
        g.drawString("Hello", 0, 30);版本2是扩展这一句
        //把图形刷到img对象中
        g.dispose();//相当于IO中的close()方法带动flush()
        ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
    }



----------


    @Test
    public void demo2() throws IOException {
        int w = 60;
        int h = 30;
        BufferedImage img = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
        Graphics g = img.getGraphics();

        //背景
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, w, h);
        //字体
        g.setFont(new Font("aa", Font.BOLD, 18));
        //输出验证码: 4个0~9之间的随机整数
        Random r = new Random();
        for(int i=0;i<4;i++){
            int a = r.nextInt(10);
            int y = 10+r.nextInt(20);//上下位置:10~30
            Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
            g.setColor(c);
            g.drawString(""+a, i*16, y);
        }
        //画干扰线
        for(int i=0;i<20;i++){
            Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
            g.setColor(c);
            g.drawLine(r.nextInt(w), r.nextInt(h), r.nextInt(w), r.nextInt(h));
        }

        //把图形刷到img对象中
        g.dispose();//相当于IO中的close()方法带动flush()
        ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
    }

复杂验证码(旋转和缩放)

@Test
    public void demo3() throws IOException {
        int w = 80;
        int h = 30;
        BufferedImage img = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
        Graphics g = img.getGraphics();
        Graphics2D g2d = ( Graphics2D )g; // ※※※
        //字体
        g2d.setFont(new Font("aa", Font.BOLD, 18));

        //背景
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, w, h);


        //输出验证码: 40~9之间的随机整数
        Random r = new Random();
        for(int i=0;i<4;i++){
            int a = r.nextInt(10);
            int y = 10+r.nextInt(20);//上下位置:10~30
            Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
            g2d.setColor(c);

            //旋转和放缩※※※
            AffineTransform tx = new AffineTransform();
            tx.rotate(r.nextDouble(), i*16, y-5);
            tx.scale(0.6+r.nextDouble(), 0.6+r.nextDouble());
            g2d.setTransform(tx);

            g2d.drawString(""+a, i*16, y);
        }
        //画干扰线
        for(int i=0;i<10;i++){
            Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
            g2d.setColor(c);
            g2d.drawLine(r.nextInt(w), r.nextInt(h), r.nextInt(w), r.nextInt(h));
        }

        //把图形刷到img对象中
        g2d.dispose();//相当于IO中的close()方法带动flush()
        ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值