Java-验证码图片生成器

简介: Java-验证码图片生成器

基本参数

/**
 * 随机验证码生成访问
 */
private static final String RANGE_RANDOM_STR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

/**
 * 图片尺寸设置
 */
private static final int WIDTH = 100;
private static final int HEIGHT = 32;

/**
 * 干扰线段数量
 */
private static final int LINE_NUM = 40;

/**
 * 随机验证码个数
 */
private static final int STE_NUM = 4;

/**
 * 验证码默认字体
 */
private static final Font DEFAULT_FONT =  new Font("Times New Roman", Font.ROMAN_BASELINE, 22);

/**
 * 随机数工具
 */
private static final Random RANDOM = new Random();

获取随机字符串

public static String getRandomString() {
    StringBuffer rssb = new StringBuffer();
    for(int index = 0; index < STE_NUM; index++) {
        rssb.append(RANGE_RANDOM_STR.charAt(RANDOM.nextInt(RANGE_RANDOM_STR.length())));
    }
    return rssb.toString();
}

获得随机颜色

private static Color getRandColor(int fc, int bc) {
    if (fc > 255) fc = 255;
    if (bc > 255) bc = 255;
    int r = fc + RANDOM.nextInt(bc - fc - 16);
    int g = fc + RANDOM.nextInt(bc - fc - 14);
    int b = fc + RANDOM.nextInt(bc - fc - 18);
    return new Color(r, g, b);
}

绘制干扰线

private static void drowLine(Graphics graphics) {
    int x = RANDOM.nextInt(WIDTH);
    int y = RANDOM.nextInt(HEIGHT);
    int xl = RANDOM.nextInt(13);
    int yl = RANDOM.nextInt(15);
    graphics.drawLine(x, y, x + xl, y + yl);
}

绘制字符串

private static void drowString(Graphics graphics, String randomString) {
    // 设置字体样式
    graphics.setFont(DEFAULT_FONT);
    // 设置字体颜色
    graphics.setColor(new Color(RANDOM.nextInt(101), RANDOM.nextInt(111), RANDOM.nextInt(121)));
    graphics.translate(RANDOM.nextInt(3), RANDOM.nextInt(3));
    graphics.drawString(randomString, 20, 20);
}

获取图片

/**
 * 获取图片验证码。
 */
public static BufferedImage getImage(String randomString) {
    // 创建绘图对象
    BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_BGR);
    Graphics graphics = image.getGraphics();
    // 绘图大小
    graphics.fillRect(0, 0, WIDTH, HEIGHT);
    // 字体大小
    graphics.setFont(DEFAULT_FONT);
    // 字体颜色
    graphics.setColor(getRandColor(110, 133));
    // 绘制干扰线
    for (int i = 0; i <= LINE_NUM; i++) {
        drowLine(graphics);
    }
    // 绘制随机字符串
    drowString(graphics, randomString);
    graphics.dispose();
    return image;
}

/**
 * 获取图片验证码。
 */
public static BufferedImage getImage() {
    return getImage(getRandomString());
}

HTTP响应设置

// 设置相应类型。输出的内容为图片
response.setContentType("image/jpeg");
// 设置响应头信息。不要缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
try {
    // 根据随机字符串,生成图片对象
    String randomString = VerifyUtils.getRandomString();
    BufferedImage image = VerifyUtils.getImage(randomString);
    // 将内存中的图片通过流动形式输出到客户端
    ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (IOException e) {
    LOGGER.error("IOException : {}", e.getMessage(), e);
}
相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
银行转账p图软件,对公转账截图生成器,java版开发银行模拟器【仅供学习参考】
这是一套简单的银行账户管理系统代码,包含`BankAccount`和`BankSystem`两个核心类。`BankAccount`负责单个账户的管理
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。
|
存储 Java 数据库
银行流水生成器在线制作,银行转账p图在线生成,java实现最牛的生成器【仅供学习用途】
本示例展示了一个基于Java的银行交易记录管理系统基础架构,涵盖交易记录生成、数字签名加密及账本存储功能。核心内容包括:1) TransactionRecord类
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
前端开发 JavaScript Java
Java中将图片转换为base64格式的技巧
这样,你就可以在Java中将图片转换为Base64格式了。这个方法的实现非常简单,只需要使用Java的内置库,无需任何额外的库。希望这个方法对你有所帮助。
956 22
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
5173 5
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
1795 1
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
675 4
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
420 2
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
952 1