java生成二维码图片、转base64

2,883 阅读3分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

本文介绍通过java把文字或url生成二维码,使用浏览器或者微信扫一扫即可获得文字或url内容,超简单的方法,两个步骤复制粘贴即可使用。

注意:内容是文字会直接显示,如果内容为url地址那么会直接访问对应的地址,微信扫一扫访问的时候可能会被微信屏蔽,如被屏蔽清查看url地址是否安全,是否违法。

这里生成二维码后输出提供了种方式:
1、生成的二维码转base64
2、直接输出二维码图片

通过google的二维码工具包来进行二维码的生成,首先通过maven引入对应的jar包

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.0</version>
</dependency>

具体代码实现

具体实现代码如下,maven正确导入jar包后直接复制粘贴以下即可使用,使用方式和生成过程都写在代码注释中,注释非常详细。

// 二维码需要使用到的颜色
private int BLACK = 0xFF000000;
private int WHITE = 0xFFFFFFFF;

@Test
public void createQrCodeImg(){
    // 需要生成的二维码的文字、地址
    String QrCodeStr = "新年快乐,虎年大吉";
    // 生成的文件路径,这样写是生成在桌面,如果需要在另外的路径直接把文件路径替换即可。
    String imgPath = FileSystemView.getFileSystemView().getHomeDirectory() + File.separator;
    // 生成的二维码名称
    String imgName = "QrCodeStr.jpg";
    // 创建二维码
    try {
        Map<EncodeHintType, String> charcter = new HashMap<>();
        // 设置字符集
        charcter.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        // 设置二维码的四个参数   需要生成的字符串,类型设置为二维码,二维码宽度,二维码高度,字符串字符集
        BitMatrix bitMatrix = new MultiFormatWriter()
                .encode(QrCodeStr, BarcodeFormat.QR_CODE, 500, 500, charcter);
        // 创建文件对象
        File file = new File(imgPath, imgName);
        // 二维码像素,也就是上面设置的 500
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        // 创建二维码对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                // 按照上面定义好的二维码颜色编码生成二维码
                image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK : WHITE);
            }
        }
        // 1、第一种方式
        // 生成的二维码图片对象转 base64
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        // 设置图片的格式
        ImageIO.write(image, "png", stream);
        String base64 = Base64.encode(stream.toByteArray());
        // 输出转换成功后的base64编码
        System.out.println(base64);
        // 2、第二种方式
        // 直接输出二维码文件
        ImageIO.write(image, "jpg", file);
        System.out.println("二维码创建成功文件地址:" + file);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

注意
1、生成二维码转base64后,如果想在前端使用img标签显示内容需要在当前的字符串前加上图片的前缀,这里设置的图片格式为png
2、输出二维码文件,由于这里的地址和文件名写死了,所以多次生成会覆盖上次的文件,如果需要生成多次文件更改一下生成的文件名或者文件生成地址即可。