JavaSE自定义验证码图片生成器

设计项目的时候打算在原有的功能上补充验证码功能,在实现了邮箱验证码之后想着顺便把一个简单的图片验证码生成器也实现一下,用作分享。

注意,实际开发中验证码往往采用各种组件,通过导入依赖来在后端开发时使用相关功能,而不会自己手动地实现一个原生的验证码生成器。

采取组件的方式我也尝试过,在这里不作分享,感兴趣的同学可以参考这位大佬介绍的Hutool登录验证码实现-CSDN博客

这里分享一下手动实现的生成验证码的后端功能,逻辑很简单,方便大家理解。可以在 SpringBoot项目Controller中实现调用代码,加到实际的业务逻辑中。直接复制粘贴CaptchaGenerator类,调用 getLoginCodeImage() 方法即可,用法可以参照下面的测试类。

Github:GitHub - wyd333/CaptchaTest: 自定义验证码生成器

(生成的验证码图片长这样: 

CaptchaGenerator

import java.awt.*;
import java.awt.image.BufferedImage;

import java.util.Random;

public class CaptchaGenerator extends CodeUtil{

    private static final int WIDTH = 200;
    private static final int HEIGHT = 50;
    private static final int FONT_SIZE = 30; //字符大小
    private String loginCode; //验证码


    /**
     * 生成验证码图片
     * @return
     */
    public BufferedImage getLoginCodeImage(){
        //验证码图片
        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();

        // 1-生成随机验证码
        loginCode = createCode();

        // 2-设置背景
        drawBackground(graphics);

        // 3-绘制验证码
        drawRands(graphics, loginCode.toCharArray());

        // 4-关闭资源
        graphics.dispose();

        return image;
    }
    
    /**
    * 绘制验证码
    */
    private static void drawRands(Graphics g, char[] rands) {
        g.setFont(new Font("Console", Font.BOLD, FONT_SIZE));
        for (int i = 0; i < rands.length; i++) {
            g.setColor(getRandomColor());
            g.drawString("" + rands[i], i * FONT_SIZE + 10, 30);
        }
    }


    /**
     * 生成 CODE_LENGTH 长度的随机验证码
     * @return
     */
    @Override
    public String createCode() {
        // 可以包含在验证码中的字符集合
        String charset = "0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < CODE_LENGTH; i++) {
            int randomIndex = random.nextInt(charset.length());
            code.append(charset.charAt(randomIndex));
        }
        return code.toString();
    }

    /**
     * 获取随机颜色给验证码文本
     * @return 随机颜色
     */
    private static Color getRandomColor() {
        Random ran = new Random();
        return new Color(ran.nextInt(220), ran.nextInt(220), ran.nextInt(220));
    }

    /**
     * 绘制验证码图片背景
     * @param g 图片对象
     */
    private static void drawBackground(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        // 绘制验证码干扰点
        for (int i = 0; i < 200; i++) {
            int x = (int) (Math.random() * WIDTH);
            int y = (int) (Math.random() * HEIGHT);
            g.setColor(getRandomColor());
            g.drawOval(x, y, 1, 1);
        }
    }

    // 获取验证码的值
    public String getLoginCode() {
        return loginCode;
    }

}

测试类:生成5张验证码图片并保存

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

/**
 * Created with IntelliJ IDEA.
 * Description: 测试:生成5张验证码图片并保存
 */
public class Main {
    public static void main(String[] args) {
        int i = 5;
        while(i > 0) {
            CaptchaGenerator captchaGenerator = new CaptchaGenerator();
            BufferedImage image = captchaGenerator.getLoginCodeImage();
            // 保存图片到文件
            try {
                File output = new File("captcha" + i + ".png");
                ImageIO.write(image, "png", output);
            } catch (IOException e) {
                e.printStackTrace();
            }
            i--;
        }
    }

}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaSE 可以使用 echarts4j 库来生成 Echarts 图表。 Echarts 是一个可视化的图表库,提供了丰富的图表类型,包括折线图、柱状图、饼图等等。而 echarts4j 则是一个针对 JavaSE 开发的 Echarts 封装库,方便 Java 开发者在代码中生成和使用 Echarts 图表。 使用 echarts4j 可以通过几行代码来生成 Echarts 图表。首先,需要创建一个 ECharts 对象,然后根据需要创建不同类型的图表对象,例如折线图对象或柱状图对象。接着,通过设置图表的各种属性,如标题、大小、数据等,来定制化图表的样式和内容。最后,将图表对象添加到 ECharts 对象中,并将生成的图表写入到 HTML 文件中。 以下是一个使用 echarts4j 生成折线图的示例代码: ```java import com.github.abel533.echarts.ECharts; import com.github.abel533.echarts.Option; import com.github.abel533.echarts.axis.CategoryAxis; import com.github.abel533.echarts.axis.ValueAxis; import com.github.abel533.echarts.code.LineType; import com.github.abel533.echarts.code.Magic; import com.github.abel533.echarts.code.Tool; public class EchartsDemo { public static void main(String[] args) { // 创建 ECharts 对象 ECharts echarts = new ECharts(); // 创建折线图对象 Option option = new Option(); option.title("折线图示例"); // 设置横坐标和纵坐标 CategoryAxis categoryAxis = new CategoryAxis(); categoryAxis.data("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"); option.xAxis(categoryAxis); ValueAxis valueAxis = new ValueAxis(); option.yAxis(valueAxis); // 添加数据 option.series(echarts4j.series.Line().data(120, 200, 150, 80, 70, 110, 130)); // 设置图表工具 option.toolbox().show(true).feature(Tool.mark, Tool.dataView, Tool.restore, Tool.saveAsImage); // 设置图表样式 option.tooltip().trigger(LineType.item).formatter("{a} <br/>{b} : {c}"); // 将图表添加到 ECharts 对象中 echarts.setOption(option); // 将生成的图表写入到 HTML 文件中 echarts.writeToHtml("result.html"); } } ``` 通过上述代码,在运行后会生成一个 result.html 文件,在浏览器中打开该文件即可看到生成的折线图。以上仅是一个简单的示例,echarts4j 还提供了丰富的方法和属性,可以实现更多定制化的需求。 ### 回答2: 使用JavaSE生成Echarts图表通常需要以下步骤: 1. 导入Echarts库:首先,需要在Java项目中导入Echarts的相关库文件,这些库文件可以从Echarts官方网站下载并导入到项目中。 2. 创建图表实例:在Java代码中,可以通过创建ECharts对象来初始化一个图表实例。例如,可以使用`ECharts echarts = new ECharts();`来创建一个空的图表实例。 3. 设置图表基本属性:通过`echarts.setOption(Option option)`方法,可以设置图表的基本属性,例如标题、图例、坐标轴、提示框等。这些属性可以通过Option对象来定义和配置。 4. 添加图表数据:调用`echarts.getData().add(Series series)`方法来添加图表的数据序列。可以使用Series对象来定义每个数据序列的类型(例如折线图、柱状图等)以及对应的数据项。 5. 渲染图表:使用JavaFX、Swing或其他图形库,将图表实例渲染到图形界面中显示。 6. 保存图表:如果需要将图表保存为图片或其他格式,可以使用Echarts提供的API进行保存。 7. 更新图表:如果需要动态更新图表的数据,可以通过修改图表实例的数据序列,并重新渲染图表来实现。 总之,使用JavaSE生成Echarts图表需要导入相关库文件,创建图表实例并设置属性,添加数据并渲染图表,可以通过JavaFX、Swing等图形库来显示图表,并可以进行图表保存和动态更新。这样就可以在Java项目中实现生成Echarts图表的功能。 ### 回答3: JavaSE可以使用Echarts提供的Java API来生成图表。Echarts是一个基于JavaScript的数据可视化库,可以用来创建各种类型的图表,如折线图、柱状图、饼图等。 首先,我们需要在JavaSE项目中引入Echarts的Java API库。可以通过在pom.xml文件中配置Maven依赖,或者手动将API库文件添加到项目中。 接下来,我们可以使用Java代码来生成Echarts图表。首先,我们需要创建一个Echarts实例,可以通过调用Echarts提供的构造方法来实现,例如: ```java import com.github.abel533.echarts.ECharts; import com.github.abel533.echarts.Option; import com.github.abel533.echarts.code.Magic; import com.github.abel533.echarts.code.Tool; import com.github.abel533.echarts.json.GsonOption; // 创建Echarts实例 ECharts echarts = new ECharts(); GsonOption option = new GsonOption(); // 设置图表的通用属性 option.title().text("图表标题"); option.tooltip().show(true); // 设置图表的数据 option.legend().data("图例1", "图例2"); option.xAxis().data("数据1", "数据2", "数据3"); option.yAxis().name("数值"); // 添加图表的系列数据 option.series("图例1", Magic.line, new ArrayList<>(Arrays.asList(10, 20, 30))); option.series("图例2", Magic.pie, new ArrayList<>(Arrays.asList(100, 200, 300))); // 设置图表的工具栏 option.toolbox().show(true).feature(Tool.dataView, Tool.magicType, Tool.restore); // 将Option设置到Echarts实例中 echarts.setOption(option); // 将Echarts实例输出为HTML文件或JSON字符串 String echartsHtml = echarts.toHtml(); String echartsJson = echarts.toJson(); ``` 在以上示例中,我们创建了一个ECharts实例echarts,并通过调用Option的相关方法设置了图表的属性和数据。最后,通过调用Echarts提供的toHtml()或toJson()方法,可以将Echarts实例输出为HTML文件或JSON字符串。 需要注意的是,以上示例仅为演示Echarts的基本用法,在实际使用中,可以根据具体需求来设置更多的属性和数据。有关Echarts的更多详细用法,可以查阅Echarts的官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值