欢迎使用CSDN-markdown编辑器

来源:互联网 发布:英语发音软件 编辑:程序博客网 时间:2024/06/18 14:43

图形验证码

package com.lhy.test.utils;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import java.util.Random;/** * Created by Administrator on 2016/8/4. */public class BitmapCode {    private static final char[] CHARS = {            '0','1',  '2', '3', '4', '5', '6', '7', '8', '9'    };    private static BitmapCode bmpCode;    public static BitmapCode getInstance() {        if(bmpCode == null)            bmpCode = new BitmapCode();        return bmpCode;    }    private final static int DEFAULT_WIDTH=100;//图片的宽    private final static int DEFAULT_HEIGHT=40;//图片的高度    private final static int CODE_LENGTH=4;//验证码的长度    private int width=DEFAULT_WIDTH;    private int height=DEFAULT_HEIGHT;    private int codeLength=CODE_LENGTH;    private int lineNum=10;    private Random random=new Random();    private String code;    public Bitmap createBitmap(){        createCode();        Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Canvas canvas=new Canvas(bp);        canvas.drawColor(Color.rgb(241,252,243));//绘制背景色        Rect rect=new Rect(0,0,width,height);        //绘制边框        {            Paint paint = new Paint();            paint.setColor(Color.GRAY);            paint.setStyle(Paint.Style.STROKE);            paint.setStrokeWidth(3);            canvas.drawRect(rect, paint);        }        //绘制随机验证码        {            Paint textPaint=new Paint();            textPaint.setTextSize(24);            textPaint.setColor(Color.BLUE);            float textWidth=textPaint.measureText("0");            float textHeight=textPaint.ascent()+textPaint.descent();            float paddingTop=(height-textHeight)/2;            float paddingLeft=(width/4f-textWidth)/2;            for(int i=0;i<code.length();i++){                float skewX = random.nextInt(12) / 10;                skewX = random.nextBoolean() ? skewX : -skewX;                textPaint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜                canvas.drawText(code.charAt(i)+"",paddingLeft+i*width/4,paddingTop+random.nextInt(10)-5,textPaint);            }        }        //绘制干扰线条        {            Paint linePaint = new Paint();            drawLine(canvas, linePaint);        }        //保存        canvas.save(Canvas.ALL_SAVE_FLAG );        canvas.restore();        return bp;    }    /**     * 生成随机验证码字符     * @return     */    private void createCode(){        StringBuilder builder=new StringBuilder();        for(int i=0;i<codeLength;i++) {            builder.append(CHARS[random.nextInt(CHARS.length)]);        }        this.code=builder.toString();    }    //返回字符,供核对    public String getCode(){        return this.code;    }    //生成干扰线条    private void drawLine(Canvas canvas,Paint paint){        for(int i=0;i<lineNum;i++){            paint.setColor(randomColor());            int startX=random.nextInt(width);            int startY=random.nextInt(height);            int endX=random.nextInt(width);            int endY=random.nextInt(height);            canvas.drawLine(startX,startY,endX,endY,paint);        }    }    //生成随机颜色    private int randomColor(){        int red=random.nextInt(256);        int green=random.nextInt(256);        int blue=random.nextInt(256);        return Color.rgb(red,green,blue);    }}
0 0
原创粉丝点击