`
wen742538485
  • 浏览: 237561 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android生成验证码bitmap

阅读更多
http://blog.csdn.net/whumr1/article/details/7092013
不多说了,直接上代码,项目中用到的,未做优化,还有很多参数未设置。

[java] view plaincopy
import java.util.Random; 
 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Bitmap.Config; 
 
public class BPUtil { 
     
    private static final char[] CHARS = { 
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',  
        'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',  
        'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' 
    }; 
     
    private static BPUtil bpUtil; 
     
    public static BPUtil getInstance() { 
        if(bpUtil == null) 
            bpUtil = new BPUtil(); 
        return bpUtil; 
    } 
     
//  width="60" height="30"  
//          base_padding_left="5" 
//          range_padding_left="10" 
//          base_padding_top="15" 
//          range_padding_top="10" 
//          codeLength="4" 
//          line_number="3" 
//          font_size="20" 
     
    //default settings 
    private static final int DEFAULT_CODE_LENGTH = 4; 
    private static final int DEFAULT_FONT_SIZE = 20; 
    private static final int DEFAULT_LINE_NUMBER = 3; 
    private static final int BASE_PADDING_LEFT = 5, RANGE_PADDING_LEFT = 10, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 10; 
    private static final int DEFAULT_WIDTH = 60, DEFAULT_HEIGHT = 30; 
     
    //settings decided by the layout xml 
    //canvas width and height 
    private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;  
     
    //random word space and pading_top 
    private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT,  
            base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP; 
     
    //number of chars, lines; font size 
    private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE; 
     
    //variables 
    private String code; 
    private int padding_left, padding_top; 
    private Random random = new Random(); 
     
    public Bitmap createBitmap() { 
        padding_left = 0; 
         
        Bitmap bp = Bitmap.createBitmap(width, height, Config.ARGB_8888);  
        Canvas c = new Canvas(bp); 
 
        code = createCode(); 
         
        c.drawColor(Color.WHITE); 
        Paint paint = new Paint(); 
        paint.setTextSize(font_size); 
         
        for (int i = 0; i < code.length(); i++) { 
            randomTextStyle(paint); 
            randomPadding(); 
            c.drawText(code.charAt(i) + "", padding_left, padding_top, paint); 
        } 
 
        for (int i = 0; i < line_number; i++) { 
            drawLine(c, paint); 
        } 
         
        c.save( Canvas.ALL_SAVE_FLAG );//保存   
        c.restore();// 
        return bp; 
    } 
     
    public String getCode() { 
        return code; 
    } 
     
    private String createCode() { 
        StringBuilder buffer = new StringBuilder(); 
        for (int i = 0; i < codeLength; i++) { 
            buffer.append(CHARS[random.nextInt(CHARS.length)]); 
        } 
        return buffer.toString(); 
    } 
     
    private void drawLine(Canvas canvas, Paint paint) { 
        int color = randomColor(); 
        int startX = random.nextInt(width); 
        int startY = random.nextInt(height); 
        int stopX = random.nextInt(width); 
        int stopY = random.nextInt(height); 
        paint.setStrokeWidth(1); 
        paint.setColor(color); 
        canvas.drawLine(startX, startY, stopX, stopY, paint); 
    } 
     
    private int randomColor() { 
        return randomColor(1); 
    } 
 
    private int randomColor(int rate) { 
        int red = random.nextInt(256) / rate; 
        int green = random.nextInt(256) / rate; 
        int blue = random.nextInt(256) / rate; 
        return Color.rgb(red, green, blue); 
    } 
     
    private void randomTextStyle(Paint paint) { 
        int color = randomColor(); 
        paint.setColor(color); 
        paint.setFakeBoldText(random.nextBoolean());  //true为粗体,false为非粗体 
        float skewX = random.nextInt(11) / 10; 
        skewX = random.nextBoolean() ? skewX : -skewX; 
        paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜 
//      paint.setUnderlineText(true); //true为下划线,false为非下划线 
//      paint.setStrikeThruText(true); //true为删除线,false为非删除线 
    } 
     
    private void randomPadding() { 
        padding_left += base_padding_left + random.nextInt(range_padding_left); 
        padding_top = base_padding_top + random.nextInt(range_padding_top); 
    } 


使用方法

[java] view plaincopy
ImageView imageView = (ImageView)findViewById(R.id.imageView); 
imageView.setImageBitmap(BPUtil.getInstance().createBitmap()); 
分享到:
评论

相关推荐

    Android生成验证码Bitmap源码

    Android下使用Canvas生成验证码Bitmap

    Android生成验证码图片

    在Android开发中,生成验证码图片是一项常见的功能,主要用于提高用户安全性,防止机器人或者恶意软件自动登录或注册。验证码图片通常包含一串随机数字或字母,用户需要手动输入以验证他们是真实的人。以下是对这个...

    Android生成图形验证码

    在Android平台上,生成图形验证码(CAPTCHA)是提高应用...综上所述,Android生成图形验证码涉及到图像处理、随机数生成、颜色处理和编码等多个技术领域,实现时需要综合运用这些知识,确保验证码的安全性和可用性。

    安卓验证码相关-android本地验证码生成.rar

    在Android平台上,本地生成验证码通常涉及以下几个步骤: 1. **生成随机数据**:首先,需要生成一段随机字符串作为验证码的内容。这个字符串可以是数字、字母或者两者的组合,长度可以根据需求设定。 2. **图像...

    AndroidJava生成验证码

    本项目是基于Android Studio的一个实例,它能够直接返回一个随机生成的验证码Bitmap,便于集成到你的应用程序中。下面我们将深入探讨如何在Android Java环境中实现这个功能。 首先,验证码通常由一组随机字符组成,...

    Android生成随机的图形验证码

    另一种实现方式是通过工具类来生成验证码图片,然后将其显示在ImageView或其他控件中。工具类通常包含一个方法,该方法返回Bitmap对象,这个Bitmap包含了生成的验证码图像。这种方式的优点是解耦,可以独立于UI进行...

    Android应用源码--生成验证码和二维码.zip

    在Android应用开发中,生成验证码和二维码是常见的功能,用于增强用户验证的安全性和提供便捷的信息传递方式。这个压缩包文件“Android应用源码--生成验证码和二维码.zip”包含了一个实现这两种功能的示例项目,主要...

    Android-Android滑块验证码控件

    在Android应用开发中,滑块验证码控件是一种常见的安全机制,用于验证用户是人类而非机器人。它通过提供一种交互式的验证方式,要求用户手动拖动一个滑块来完成一段图像或拼图,从而防止自动化的恶意操作。这篇文档...

    Android-自定义验证码生成组件

    7. **保存验证码**:将绘制好的验证码Bitmap保存到内存或本地,以便后续验证。 8. **点击事件处理**:添加OnClickListener,当用户点击验证码时,可以重新生成验证码并刷新界面。 9. **暴露接口**:为了让外部能够...

    安卓验证码相关-Android随机验证码(2).rar

    本文将深入探讨如何在Android平台上实现随机验证码的功能,以及相关的技术要点。 验证码的核心在于生成难以被算法识别的随机字符串或图像,同时确保用户可以轻松读取并输入。在Android中,我们可以采用两种常见的...

    Android 生成文字图片验证码

    在Android平台上,生成文字图片验证码(通常称为CAPTCHA)...综上所述,Android生成文字图片验证码涉及字符串随机生成、图像处理和安全策略等多个方面。通过合理的代码设计和实现,可以为应用程序提供有效的防护措施。

    android验证码的实现DEMO

    通过这个DEMO,开发者可以学习到Android验证码的基本实现流程,包括字符生成、图像绘制、用户交互及服务器通信等环节。在实际项目中,可以根据需求调整验证码的复杂度和安全等级,确保应用的安全性。

    android图片验证码本地

    2. **绘制验证码**:接下来,我们使用Android的`Canvas`和`Paint`对象在`Bitmap`上绘制验证码。可以创建多个字体颜色、大小和样式,以及绘制干扰线和点,增加识别难度。 3. **扭曲图像**:为了进一步防止机器识别,...

    android 一行代码实现验证码图片功能

    在Android开发中,生成验证码图片是一项常见的功能,用于验证用户身份、防止机器人自动操作等场景。本篇文章将详细讲解如何通过一行代码实现Android验证码图片功能,以提高开发效率。 首先,验证码图片通常由随机...

    Android应用源码之Android随机验证码.zip

    在Android应用开发中,生成随机验证码可能涉及到Java的Math类或Random类,用于生成随机数字或字符。开发者可能使用StringBuilder或StringBuffer来组合这些随机元素,形成最终的验证码字符串。 2. **Android UI设计*...

    android登陆验证码浅析代码

    测试用例通常会包括生成验证码图片、显示图片、比较用户输入与实际验证码的匹配情况等步骤。 实现验证码功能时,我们还需要考虑用户体验。验证码的生成速度应该足够快,以便用户在需要时能够即时获取;同时,验证码...

    安卓验证码相关-Android技术如何实现生成本地验证码.rar

    下面将详细介绍在Android上生成验证码的技术细节。 验证码的生成通常包括以下几个步骤: 1. **随机数生成**: 验证码的初始阶段是生成一组随机数字或字母。Android提供了`java.util.Random`类,可以生成随机整数...

    Android高级应用源码-Android随机验证码.zip

    在这个项目中,开发者可能探讨了如何在Android系统上生成和验证这种随机生成的图形验证码。 【描述】描述中提到的".zip"文件可能包含了整个项目的所有资源,包括源代码、图片资源、配置文件等。这通常是开发者为了...

    Android-安卓中的图片验证码控件

    - 错误处理:如果用户输入错误,可以显示错误提示,并重新生成验证码。 - 性能优化:考虑到用户体验,验证码的生成和验证应尽可能快,避免让用户等待过长时间。 5. 安全考虑: - 时效性:验证码应有一定的有效期...

Global site tag (gtag.js) - Google Analytics