java生成二维码到文件,java生成二维码转成BASE64

时间:2021-01-02 21:45:56

java生成二维码到文件,java生成二维码转成BASE64

如题,利用java和第三方库,把指定的字符串生成二维码,并且把二维码保存成图片,转换成BASE64格式。
需要的jar文件:

java生成二维码到文件,java生成二维码转成BASE64

package com.xueyoucto.xueyou;


import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Hashtable;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) throws IOException {
        System.out.println("hello world");
        String text = "999666111222";
        int width = 300;
        int height = 300;
        String format = "png";
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        BitMatrix bitMatrix = null;
        try {
            bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        } catch (WriterException e) {
            e.printStackTrace();
        }

        //直接写入文件
        File outputFile = new File("d:/new.png");
        MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);

        //通过流写入文件,不需要flush()
        OutputStream os1 = new FileOutputStream("d:/new2.png");
        MatrixToImageWriter.writeToStream(bitMatrix, format, os1);

        BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
        ByteArrayOutputStream os = new ByteArrayOutputStream();//新建流。
        ImageIO.write(image, format, os);//利用ImageIO类提供的write方法,将bi以png图片的数据模式写入流。
        byte b[] = os.toByteArray();//从流中获取数据数组。
        String str = new BASE64Encoder().encode(b);
        System.out.println(str);
    }
}

运行结果:
java生成二维码到文件,java生成二维码转成BASE64

图片:
java生成二维码到文件,java生成二维码转成BASE64
把这个图片放在这个网址中验证一下图片在线转换base64
结果发现和上面输出的相同。
java生成二维码到文件,java生成二维码转成BASE64
当然,是不包含头部的。