package com.zy.common.utils; import com.google.zxing.*; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.oned.Code128Writer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.util.HashMap; /** * 条形码工具 * Created by vincent on 2020/6/6 */ public class BarcodeUtils { private static final int DEFAULT_WIDTH = 110; private static final int DEFAULT_HEIGHT = 35; /** * 条形码编码 */ public static BufferedImage encode(String string){ return encode(string, null, null); } public static BufferedImage encode(String string, Integer width, Integer height){ try { Code128Writer writer = new Code128Writer(); BitMatrix bar = writer.encode(string, BarcodeFormat.CODE_128, width==null?DEFAULT_WIDTH:width, height==null?DEFAULT_HEIGHT:height, new HashMap<>()); return MatrixToImageWriter.toBufferedImage(bar); } catch (WriterException e){ throw new RuntimeException(e); } } /** * 条形码解码 */ public static String decode(String imgPath) { BufferedImage image = null; Result result = null; try { image = ImageIO.read(new File(imgPath)); if (image == null) { throw new RuntimeException("the decode image may be not exit."); } LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); result = new MultiFormatReader().decode(bitmap, null); return result.getText(); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { String imgPath = "F:/zxing_EAN-13.png"; String contents = "6926557300360"; int width = 105, height = 50; encode(contents, width, height); System.out.println("finished zxing EAN-13 encode."); String decodeContent = decode(imgPath); System.out.println("解码内容如下:" + decodeContent); System.out.println("finished zxing EAN-13 decode."); } }