JAVA生成二维码并转化为二进制在页面展示

本文介绍如何使用Java生成二维码,并通过Base64编码返回二维码图片的二进制数据,以便于前端直接显示二维码图像。文中提供了一个具体的方法实现,以及所需的jar包引用和前端展示二维码图像的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用jar包:

zxing的core包,下载路径可参考:http://download.youkuaiyun.com/detail/sxg0205/9461106


java代码:

引用包:

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import sun.misc.BASE64Encoder;  


方法:

/**
* 二维码生成器

* @param text 二维码内容
* @throws IOException 
*/
    @SuppressWarnings({ "unchecked", "rawtypes", "restriction" })
public static String generalQRCode(String url) {   
        Hashtable hints= new Hashtable();   
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");   
        String binary = null;
        
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(
url, BarcodeFormat.QR_CODE, 200, 200, hints);

// 实现一: 输出图片到指定目录
// File outputFile = new File("d://1.jpg");
//        MatrixToImageWriter.writeToFile(bitMatrix, "png", outputFile);

// 实现二:生成二维码图片并将图片转为二进制传递给前台
// 1、读取文件转换为字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage image = toBufferedImage(bitMatrix);
////
ImageIO.write(image, "png", out);
byte[] bytes = out.toByteArray();

// 2、将字节数组转为二进制
BASE64Encoder encoder = new BASE64Encoder(); 
binary = encoder.encodeBuffer(bytes).trim(); 

} catch (Exception e) {
e.printStackTrace();


return binary;
    }   


// 其他调用方法

    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.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, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
          }
        }
        
        return image;
      }

前台ajax方法:

$.ajax({
url: 方法url,
type:'post',
success : function(data) {
$('#img').attr('src', 'data:image/jpg;base64,' + data);
}
});


注意:img 的src前面需要拼接data:image/jpg;base64, 在加上后台生成的二进制才能正确解析二进制


### 将Java生成二维码图片转换为Base64字符串 为了在Java中将生成二维码图片转换成Base64编码字符串,通常会先利用像ZXing这样的库来创建二维码图像文件。一旦有了这个图像对象,就可以将其保到字节数组输出流(`ByteArrayOutputStream`),接着通过调用`javax.xml.bind.DatatypeConverter.printBase64Binary()`方法或采用`java.util.Base64.getEncoder().encodeToString(byte[])`的方式把该字节序列转化为Base64格式。 下面是一段简单的代码片段用于展示这一过程: ```java import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Base64; public class QRCodeToBase64 { private static String encodeQRCodeAsBase64(String qrData, int size) throws WriterException, IOException { // 创建二维码写入器实例 QRCodeWriter qrCodeWriter = new QRCodeWriter(); // 设置二维码参数生成位矩阵 BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, size, size); // 定义缓冲区大小和颜色模式 BufferedImage bufferedImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < size; ++x){ for(int y=0;y<size;++y){ bufferedImage.setRGB(x,y,(bitMatrix.get(x,y)?Color.BLACK:Color.WHITE).getRGB()); } } ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); ImageIO.write(bufferedImage,"png",byteArrayOS); byte[] imageBytes = byteArrayOS.toByteArray(); return Base64.getEncoder().encodeToString(imageBytes); } } ``` 上述代码定义了一个名为`encodeQRCodeAsBase64`的方法接收两个参数:一个是代表要编码的数据字符串;另一个是指定最终输出图形尺寸的一个整数值。此函数内部先是构建了一张基于输入数据的黑白两色二维码图案,之后再把它转变成PNG格式的二进制形式储于内之中,最后一步就是运用标准库中的工具类完成由原始字节向Base64字符串之间的映射操作[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值