当前位置: 代码迷 >> 综合 >> google ZXing 生成二维码和条形码
  详细解决方案

google ZXing 生成二维码和条形码

热度:81   发布时间:2024-01-11 18:25:15.0

GitHub 开源地址: https://github.com/zxing/zxing

zxing 二进制包下载地址:http://repo1.maven.org/maven2/com/google/zxing

zxing Maven 仓库地址:https://mvnrepository.com/artifact/com.google.zxing
 

 

maven:

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version>
</dependency>

 

 

工具类:

package com.swxc.core.utils;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.util.StringUtils;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** @Author :huangliang* @Description:* @Date: Created in 2019/6/28* @Modify by :*/
public class CodeUtil {public static String getQRCode(String content, int width, int height) {if (!StringUtils.isEmpty(content)) {ServletOutputStream stream = null;HashMap<EncodeHintType, Comparable> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.MARGIN, 0);try {QRCodeWriter writer = new QRCodeWriter();BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "png", os);BASE64Encoder encoder = new BASE64Encoder();String resultImage = new String("data:image/png;base64," + encoder.encode(os.toByteArray()));return resultImage;} catch (Exception e) {} finally {if (stream != null) {try {stream.flush();stream.close();} catch (IOException e) {e.printStackTrace();}}}}return null;}public static String getBarCode(String content, int width, int height) {try {Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.MARGIN, 0);int realWidth = getBarCodeNoPaddingWidth(width, content, width);BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, realWidth, height, hints);BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "png", os);BASE64Encoder encoder = new BASE64Encoder();String resultImage = new String("data:image/png;base64," + encoder.encode(os.toByteArray()));return resultImage;} catch (Exception e) {return null;}}private static int getBarCodeNoPaddingWidth(int expectWidth, String contents, int maxWidth) {boolean[] code = new Code128Writer().encode(contents);int inputWidth = code.length;double outputWidth = (double) Math.max(expectWidth, inputWidth);double multiple = outputWidth / inputWidth;//优先取大的int returnVal = 0;int ceil = (int) Math.ceil(multiple);if (inputWidth * ceil <= maxWidth) {returnVal = inputWidth * ceil;} else {int floor = (int) Math.floor(multiple);returnVal = inputWidth * floor;}return returnVal;}}

 

 

使用:

int QRWidth = Integer.parseInt(params.get("QRWidth").toString());
int QRHeight = Integer.parseInt(params.get("QRHeight").toString());
int BarWidth = Integer.parseInt(params.get("BarWidth").toString());
int BarHeight = Integer.parseInt(params.get("BarHeight").toString());
String randomCode = getRandomCode();
String QRCode = CodeUtil.getQRCode(randomCode, QRWidth, QRHeight);
String BarCode = CodeUtil.getBarCode(randomCode, BarWidth, BarHeight);
Map map = new HashMap<>();
map.put("QRCode", QRCode);
map.put("BarCode", BarCode);
map.put("randomCode", randomCode);
  相关解决方案