package zy.cloud.wms.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();
}
}