使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值