package com.gk.hotwork.Domain.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 sun.misc.BASE64Encoder;
|
|
import javax.imageio.ImageIO;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayOutputStream;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.util.Hashtable;
|
|
public class MatrixToImageWriter {
|
private static final int BLACK = 0xFF000000;
|
private static final int WHITE = 0xFFFFFFFF;
|
|
private MatrixToImageWriter() {
|
}
|
|
private 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) ? BLACK : WHITE);
|
}
|
}
|
return image;
|
}
|
private static void writeToFile(BitMatrix matrix, String format, File file)
|
throws IOException {
|
BufferedImage image = toBufferedImage(matrix);
|
if (!ImageIO.write(image, format, file)) {
|
throw new IOException("Could not write an image of format "
|
+ format + " to " + file);
|
}
|
}
|
private static void writeToStream(BitMatrix matrix, String format,
|
OutputStream stream) throws IOException {
|
BufferedImage image = toBufferedImage(matrix);
|
if (!ImageIO.write(image, format, stream)) {
|
throw new IOException("Could not write an image of format " + format);
|
}
|
}
|
|
public static String getBase64Img(String text) throws IOException, WriterException {
|
// 二维码图片宽度
|
int width = 40;
|
// 二维码图片高度
|
int height = 40;
|
// 二维码的图片格式
|
String format = "jpg";
|
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
|
// 内容所使用字符集编码
|
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
|
|
BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
|
BarcodeFormat.CODE_128, width, height, hints);
|
/*BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
|
BarcodeFormat.QR_CODE, width, height, hints);*/
|
// 生成二维码
|
File outputFile = new File("d:" + File.separator + "new.jpg");
|
MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
|
|
ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
|
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
|
byte[] pngData = pngOutputStream.toByteArray();
|
BASE64Encoder encoder = new BASE64Encoder();
|
String png_base64 = encoder.encodeBuffer(pngData).trim();
|
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");
|
return png_base64;
|
}
|
}
|