使用Java绘制验证码

效果图:

JDemo.java

import java.io.File;
import java.io.IOException;
import static java.lang.System.out;
import javax.imageio.ImageIO;

public class JDemo {

    public static void main(String[] args) throws IOException {
        VerificationCode verificationCode = new VerificationCode(7);
        ImageIO.write(verificationCode.getImage(), "png", new File("C:\\Users\\BuYishi\\Desktop\\New folder\\JDemo.png"));
        out.println(verificationCode.getContent());
    }
}

VerificationCode.java

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

public class VerificationCode {

    private StringBuilder verificationCodeContent;

    public VerificationCode(int length) {
        verificationCodeContent = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < length; ++i) {
            int charType = random.nextInt(3);  //随机的验证码字符类型,0表示数字,1表示小写字母,2表示大写字母
            char c;
            switch (charType) {
                case 0:
                    c = (char) (random.nextInt(10) + ‘0‘);
                    break;
                case 1:
                    c = (char) (random.nextInt(26) + ‘a‘);
                    break;
                default:
                    c = (char) (random.nextInt(26) + ‘A‘);
            }
            verificationCodeContent.append(c);
        }
    }

    public String getContent() {
        return verificationCodeContent.toString();
    }

    public BufferedImage getImage() {
        int width = 200, height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();
        graphics.setColor(Color.red);
        graphics.fillRect(0, 0, width, height);  //绘制验证码图像背景为红色
        Font currentFont = graphics.getFont();
        Font newFont = new Font(currentFont.getFontName(), currentFont.getStyle(), 30);
        FontMetrics fontMetrics = graphics.getFontMetrics(newFont);
        String string = verificationCodeContent.toString();
        graphics.setColor(Color.green);
        graphics.setFont(newFont);
        //绘制绿色的验证码,并使其居中
        graphics.drawString(string, (width - fontMetrics.stringWidth(string)) / 2, (height - fontMetrics.getHeight()) / 2 + fontMetrics.getAscent());
        graphics.setColor(Color.blue);
        Random random = new Random();
        for (int i = 0; i < 20; ++i) {  //绘制20条干扰线,其颜色为蓝
            int x1 = random.nextInt(width), y1 = random.nextInt(height);
            int x2 = random.nextInt(width), y2 = random.nextInt(height);
            graphics.drawLine(x1, y1, x2, y2);
        }
        return image;
    }
}

原文地址:https://www.cnblogs.com/buyishi/p/9736146.html

时间: 2024-10-21 23:37:42

使用Java绘制验证码的相关文章

java登录验证码

一.创建web项目 使用简单servlet来演示java验证码图片生成,servlet简单使用参考http://www.cnblogs.com/ywlaker/p/6038676.html 二.生成验证码 创建VcodeObject.java,存储验证码与图片 package com.demo.vcode; import java.io.InputStream; public class VcodeObject { private String code; private InputStream

java登陆验证码与JS无刷新验证

最近公司的项目的登陆模块由我负责,所以就做了个登陆小功能进行练手,其包括了用jQuery对用户名和密码进行不为null验证,和出于安全性考虑加了一个验证码的校验 别的不说先上代码 controller层 CreateImage.java package com.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage;

java生成验证码图片

public class AuthImg extends HttpServlet { /** * */ private static final long serialVersionUID = 4975974534946437434L; // 设置图形验证码字符串的字体和大小 private Font mFont = new Font("微软雅黑", Font.ITALIC, 18); private Random random = new Random(); public void

使用GDI绘制验证码

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 使用GDI绘制验证码B { public parti

Java绘制图片生成图片文件进行预览

Java绘制图片并实现打印前生成图片文件进行预览, 适用于开发阶段. 如果要使用界面完成预览,请另找资源.这里用这个功能主要是用于结果预览,因为如果使用打印来进行结果验证,会浪费大量的纸张. Java代码: import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;imp

java生成验证码

一:需求分析 使用java生成验证码: 1:生成画布,画好背景图 2:画随机数 3:画干扰线 4:将内存中的图片保存到硬盘上 二:代码如下 1 /** 2 * 3 */ 4 package com.hlcui.io; 5 6 import java.awt.Color; 7 import java.awt.Font; 8 import java.awt.Graphics; 9 import java.awt.image.BufferedImage; 10 import java.io.File;

工作笔记5.JAVA图片验证码

本文主要内容为:利用JAVA图片制作验证码. 设计思路: 1.拷贝AuthImageServlet.class图片验证码 2.配置web.xml 3.JSP中,调用封装好的AuthImageServlet,实现载入验证码的功能. 4.取出存放在Session中的验证码.在Action中推断验证码的正确性 相比較上一篇博客<工作笔记5.JAVA文本框验证码>而言,图片验证码添加了安全性. 在Action中,通过取出Session中的验证码与输入的验证码是否匹配进行推断. 步骤: 1.拷贝Auth

java识别验证码

所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alpha,swingx-1.0:http://download.csdn.net/detail/chenyangqi/9190683 HttpWatch Professional:http://download.csdn.net/detail/chenyangqi/9208339 项目简介: 我们学校使

Java 绘制环形的文字 (Circle Text Demo)

1. [代码]CircleTextDemo.java     import java.awt.*;import java.awt.event.*;import java.awt.geom.*; /** * A demo class that illustrates drawing text * along the outside of a circle. */public class CircleTextDemo extends Canvas {    Frame myframe;    Tex