zoukankan      html  css  js  c++  java
  • Gif验证码类

    package com.paic.bics.common.utils.vcode;
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    /**
     * <p>Gif验证码类</p>
     
     * @version:1.0
     */
    public class GifCaptcha extends Captcha
    {
        public GifCaptcha()
        {
        }
    
        public GifCaptcha(int width,int height){
            this.width = width;
            this.height = height;
        }
    
        public GifCaptcha(int width,int height,int len){
            this(width,height);
            this.len = len;
        }
    
        public GifCaptcha(int width,int height,int len,Font font)
        {
            this(width,height,len);
            this.font = font;
        }
    
        @Override
        public void out(OutputStream os)
        {
            try
            {
                GifEncoder gifEncoder = new GifEncoder();   // gif编码类,这个利用了洋人写的编码类,所有类都在附件中
                //生成字符
                gifEncoder.start(os);
                gifEncoder.setQuality(180);
                gifEncoder.setDelay(100);
                gifEncoder.setRepeat(0);
                BufferedImage frame;
                char[] rands =alphas();
                Color fontcolor[]=new Color[len];
                for(int i=0;i<len;i++)
                {
                    fontcolor[i]=new Color(20 + num(110), 20 + num(110), 20 + num(110));
                }
                for(int i=0;i<len;i++)
                {
                    frame=graphicsImage(fontcolor, rands, i);
                    gifEncoder.addFrame(frame);
                    frame.flush();
                }
                gifEncoder.finish();
            }finally
            {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    
        }
    
        /**
         * 画随机码图
         * @param fontcolor 随机字体颜色
         * @param strs 字符数组
         * @param flag 透明度使用
         * @return BufferedImage
         */
        private BufferedImage graphicsImage(Color[] fontcolor,char[] strs,int flag)
        {
            BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
            //或得图形上下文
            //Graphics2D g2d=image.createGraphics();
            Graphics2D g2d = (Graphics2D)image.getGraphics();
            //利用指定颜色填充背景
            g2d.setColor(Color.WHITE);
            g2d.fillRect(0, 0, width, height);
            AlphaComposite ac3;
            int h  = height - ((height - font.getSize()) >>1) ;
            int w = width/len;
            g2d.setFont(font);
            for(int i=0;i<len;i++)
            {
                ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha(flag, i));
                g2d.setComposite(ac3);
                g2d.setColor(fontcolor[i]);
                g2d.drawOval(num(width), num(height), 5+num(10), 5+num(10));
                g2d.drawString(strs[i]+"", (width-(len-i)*w)+(w-font.getSize())+1, h-4);
            }
            g2d.dispose();
            return image;
        }
    
        /**
         * 获取透明度,从0到1,自动计算步长
         * @return float 透明度
         */
        private float getAlpha(int i,int j)
        {
            int num = i+j;
            float r = (float)1/len,s = (len+1) * r;
            return num > len ? (num *r - s) : num * r;
        }
    
    }
  • 相关阅读:
    nginx转发域名小记
    简化kubernetes应用部署工具之Helm应用部署
    docker-compose的使用
    使用二进制包安装k8s
    搭建k8s(一)
    linux环境下安装使用selenium Chrome
    常用User-Agent大全
    缓存之Memcache
    git-commit Angular规范
    Kubernetes介绍及基本概念
  • 原文地址:https://www.cnblogs.com/shibazizhan/p/7240954.html
Copyright © 2011-2022 走看看