package cn.efunbox.manage.base.util;

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

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

public class QRCodeUtil {

    /**
     * 根据内容,生成指定宽高、指定格式的二维码图片
     *
     * @param url   内容
     * @return 生成的二维码图片路径
     * @throws Exception
     */
    public static String generateQRCode(String url) throws IOException, WriterException {
        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        hints.put(EncodeHintType.MARGIN, 0);
        BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, 360, 360, hints);
        BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(image, "png", os);
        byte b[] = os.toByteArray();
        String QRCode = new BASE64Encoder().encode(b);
        return QRCode;
    }

    public static void main(String[] args) throws Exception {
        String s = QRCodeUtil.generateQRCode("http://www.baidu.com");
        System.out.println(s);
    }
}