欢迎使用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
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- HDU-5793-A Boring Question(打表找规律)
- 全选checkbox //easyui
- Redis安装
- gerrit升级到16.04之后连接不到服务器
- PDO预处理
- 欢迎使用CSDN-markdown编辑器
- 51nod 多重背包问题
- 【JAVA基础】jdk环境变量配置
- 腾讯优测优分享-手机应用自动遍历的实现
- 一些很好的文章链接
- Vector反向迭代器使用
- spring定时任务
- 2.4 设计评选优秀教师和学生的程序,其类结构如图 12.5 所示。当输入一系列教师 或学生的记录后,将优秀学生及教师的姓名列出来。 图 12.5 类结构 类 base char name[8]; 含
- DataTable转换成JSON(实验区APP版本)