GIF动画附加码的例子JAVA版本

GIF动画附加码,原来有一个PHP版本,但是最近项目用到JAVA所以废弃了PHP版本。

java版本核心类是Captcha类,代码如下:



package com.youqian.util.gifUtil;
import java.awt.*;
import java.io.OutputStream;

import com.meles.cn.Loadfont;

/**
 * <p>验证码抽象类,暂时不支持中文</p>
 *
 * @author: wuhongjun
 * @version:1.0
 */
public abstract class Captcha
{
    //protected Font font = new Font("Verdana", Font.ITALIC, 28);   // 字体
    protected Font font = Loadfont.loadFont("D:/workspace440/springtest/CloudOcr/src/57868198CAI978_2.ttf",30f);   // 自定义手写字体
    protected int len = 5;  // 验证码随机字符长度
    protected int width = 150;  // 验证码显示跨度
    protected int height = 40;  // 验证码显示高度
    private String chars = null;  // 随机字符串

    /**
     * 生成随机字符数组
     * @return 字符数组
     */
    protected char[] alphas()
    {
        char[] cs = new char[len];
        for(int i = 0;i<len;i++)
        {
            cs[i] = Randoms.alpha();
        }
        chars = new String(cs);
        return cs;
    }
    public Font getFont()
    {
        return font;
    }

    public void setFont(Font font)
    {
        this.font = font;
    }

    public int getLen()
    {
        return len;
    }

    public void setLen(int len)
    {
        this.len = len;
    }

    public int getWidth()
    {
        return width;
    }

    public void setWidth(int width)
    {
        this.width = width;
    }

    public int getHeight()
    {
        return height;
    }

    public void setHeight(int height)
    {
        this.height = height;
    }

    /**
     * 给定范围获得随机颜色
     * @return Color 随机颜色
     */
    protected Color color(int fc, int bc)
    {
        if (fc > 255)
            fc = 255;
        if (bc > 255)
            bc = 255;
        int r = fc + Randoms.num(bc - fc);
        int g = fc + Randoms.num(bc - fc);
        int b = fc + Randoms.num(bc - fc);
        return new Color(r, g, b);
    }

    /**
     * 验证码输出,抽象方法,由子类实现
     * @param os 输出流
     */
    public abstract void out(OutputStream os);

    /**
     * 获取随机字符串
     * @return string
     */
    public String text()
    {
        return chars;
    }
}


基本原理是调用了自定义字体,然后用Awt的方法生成动画。项目源代码下载:http://www.meles.cn/bbs/forum.php?mod=viewthread&tid=5461&page=1&extra=#pid9575


由于核心是字体库,所以选取一个合适的字体库就很重要了。如何考虑识别率高,可以采用标准的TrueType字库,比如:楷体,宋体。

为了防止人家识别和破解,我在网上找了一些诡异的字体,比如:娃娃体,手写体。


后来有一天我发现了一个更好玩的东东:FontCreator,这玩意可以自己编辑一个字体,原理基本就是你在白纸上画张字母,然后拍照,然后倒入到字体库中,设置好字体映射吗,就OK了!


有了这玩意,妈妈再也不担心我破解识别码了!

这里是我写的字母d,呵呵~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值