用Java实现生成图片验证码

通过代码实现生成一个随机验证码图片,且生成后自动打开:

package day_12_17;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;

/**
 * @author soberw
 * @Classname Fonts
 * @Description 验证码生成
 * @Date 2021-12-17 15:14
 */
public class Fonts {
    public static void main(String[] args) {
        Font font = new Font("宋体", Font.BOLD, 50);

        BufferedImage bi = new BufferedImage(160, 100, BufferedImage.TYPE_INT_ARGB);

        Graphics2D g2 = bi.createGraphics();
        //这三行是设置抗锯齿
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);

        Random random = new Random();
        String letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        g2.setColor(Color.BLACK);
        g2.drawLine(0,0,160,100);
        int add = 0;
        double ro = 0.2;
        for (int i = 0; i < 4; i++) {
            font.deriveFont(Font.BOLD, 30f);
            int r = random.nextInt(256);
            int g = random.nextInt(256);
            int b = random.nextInt(256);
            int a = random.nextInt(100) + 150;
            g2.setColor(new Color(r, g, b, a));
            g2.setFont(font);
            String let = String.valueOf(letter.charAt(random.nextInt(letter.length())));
            if(random.nextBoolean()){
                ro = -ro;
            }
            g2.rotate(ro);
            g2.drawString(let, random.nextInt(10) + add, 60);
            add += 40;
            g2.rotate(-ro);

        }
        g2.dispose();

        try {
            ImageIO.write(bi, "png", new File("E:\\HelloJava\\soberw\\src\\main\\java\\ver.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            Runtime.getRuntime().exec("cmd /k start E:\\HelloJava\\soberw\\src\\main\\java\\ver.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:
请添加图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值