package com.zy.common.utils; 
 | 
  
 | 
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.qrcode.decoder.ErrorCorrectionLevel; 
 | 
  
 | 
import javax.imageio.ImageIO; 
 | 
import java.awt.image.BufferedImage; 
 | 
import java.io.*; 
 | 
import java.util.concurrent.ConcurrentHashMap; 
 | 
  
 | 
/** 
 | 
 * Created by vincent on 2020-03-23 
 | 
 */ 
 | 
public class QrCode { 
 | 
  
 | 
    private static final String CHARSET = "utf-8"; 
 | 
    private static final String FORMAT_NAME = "JPG"; 
 | 
    // 二维码尺寸 
 | 
    private static final int QRCODE_SIZE = 150; 
 | 
  
 | 
    public static BufferedImage createImg(String content) throws WriterException { 
 | 
        return createImg(content, QRCODE_SIZE, QRCODE_SIZE); 
 | 
    } 
 | 
  
 | 
    public static BufferedImage createImg(String content, Integer wid, Integer hei) throws WriterException { 
 | 
        ConcurrentHashMap<EncodeHintType, Object> hints = new ConcurrentHashMap<>(); 
 | 
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); 
 | 
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET); 
 | 
        hints.put(EncodeHintType.MARGIN, 1); 
 | 
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, wid, hei, hints); 
 | 
        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) ? 0xFF000000 : 0xFFFFFFFF); 
 | 
            } 
 | 
        } 
 | 
        for (int x = 0; x < width; x++) { 
 | 
            for (int y = 0; y < height; y++) { 
 | 
                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); 
 | 
            } 
 | 
        } 
 | 
        return image; 
 | 
    } 
 | 
  
 | 
    private static InputStream convert(BufferedImage image) { 
 | 
        ByteArrayOutputStream os = new ByteArrayOutputStream(); 
 | 
        try { 
 | 
            ImageIO.write(image, FORMAT_NAME, os); 
 | 
            return new ByteArrayInputStream(os.toByteArray()); 
 | 
        } catch (IOException e) { 
 | 
            System.err.println(e); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    public static void inputstreamtofile(InputStream ins, File file) { 
 | 
        try { 
 | 
            OutputStream os = new FileOutputStream(file); 
 | 
            int bytesRead = 0; 
 | 
            byte[] buffer = new byte[8192]; 
 | 
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { 
 | 
                os.write(buffer, 0, bytesRead); 
 | 
            } 
 | 
            os.close(); 
 | 
            ins.close(); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static void main(String[] args) throws WriterException { 
 | 
        String text = "1234567890"; 
 | 
        String destPath = "/Users/vincent/Desktop/jam.jpg"; 
 | 
        BufferedImage img = QrCode.createImg(text); 
 | 
        InputStream inputStream = convert(img); 
 | 
        inputstreamtofile(inputStream, new File(destPath)); 
 | 
  
 | 
//        BufferedImage img = QrCode.createImg(String.valueOf(id)); 
 | 
//        if (!ImageIO.write(img, "jpg", response.getOutputStream())) { 
 | 
//            throw new IOException("Could not write an image of format jpg"); 
 | 
//        } 
 | 
//        response.getOutputStream().flush(); 
 | 
//        response.getOutputStream().close(); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |