• zxing详细使用说明 java生成二维码、条形码


    一、引用maven依赖

    
    <dependency>
      <groupId>com.google.zxinggroupId>
      <artifactId>javaseartifactId>
      <version>3.5.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、生成条形码

    1.生成二维码基本使用

    //条形码内容
    String content = "这里是条形码生成的内容!!!";
    //条形码格式(选择二维码格式)
    BarcodeFormat format = BarcodeFormat.QR_CODE;
    //条形码图片宽度和高度
    int width = 200, height = 200;
    //条形码图片自定义配置(非必填),可以设置二维码的内容编码格式、纠错等级等待
    Map<EncodeHintType, Object> hints = new HashMap<>();
    // 设置内容编码格式
    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    // 设置纠错等级
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
    //生成条形码
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix bitMatrix = writer.encode(content, format, width, height, hints);
    //设置二维码颜色
    MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
    //转成图片信息
    BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2.BarcodeFormat (条形码类型)

    设置生成条形码的类型。
    如:二维码、EAN-13码、UPC-A码、Code-128码、Code-39码等等。

    条形码类型描述
    BarcodeFormat.AZTEC阿兹特克码
    BarcodeFormat.CODABARCodabar码
    BarcodeFormat.CODE_39CODE-30码
    BarcodeFormat.CODE_93CODE-93码
    BarcodeFormat.CODE_128CODE-128码
    BarcodeFormat.DATA_MATRIX矩阵式二维条码
    BarcodeFormat.EAN_8EAN-8码
    BarcodeFormat.EAN_13EAN-13码
    BarcodeFormat.ITF交插二五条码
    BarcodeFormat.MAXICODEMaxiCode二维条码
    BarcodeFormat.PDF_417PDF417
    BarcodeFormat.QR_CODE二维码
    BarcodeFormat.RSS_14RSS 14
    BarcodeFormat.RSS_EXPANDEDRSS EXPANDED
    BarcodeFormat.UPC_AUPC A
    BarcodeFormat.UPC_EUPC E
    BarcodeFormat.UPC_EAN_EXTENSIONUPC EAN EXTENSION

    3.EncodeHintType(条形码自定义属性)

    keyvalueClassvalue描述
    EncodeHintType.ERROR_CORRECTIONErrorCorrectionLevelErrorCorrectionLevel.L容错率~7%设置条形码识别容错率
    ErrorCorrectionLevel.M容错率~15%
    ErrorCorrectionLevel.Q容错率~25%
    ErrorCorrectionLevel.H容错率~30%
    EncodeHintType.CHARACTER_SETStringUTF-8、GBK、ASCI等字符编码,注:存在中文建议使用UTF-8
    EncodeHintType.DATA_MATRIX_SHAPESymbolShapeHintSymbolShapeHint.FORCE_NONE默认形状设置条形码外形
    SymbolShapeHint.FORCE_SQUARE正方形
    SymbolShapeHint.FORCE_RECTANGLE矩形
    EncodeHintType.DATA_MATRIX_COMPACTBoolean类型为Boolean,或“true”或“false”字符串值指定是否为数据矩阵使用紧凑模式
    EncodeHintType.MARGINInteger
    String
    可以使用Integer或String,但是String必须是整数设置二维码的外边距
    EncodeHintType.PDF417_COMPACTBoolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false"指定PDF417是否使用紧凑模式
    EncodeHintType.PDF417_COMPACTIONCompaction
    String
    Compaction.AUTO自动指定对PDF417使用的压缩模式
    Compaction.TEXT文本
    Compaction.BYTE字节
    Compaction.NUMERIC数字
    String必须和枚举值相同
    EncodeHintType.PDF417_DIMENSIONSDimensionsnew Dimensions()指定PDF417的最小和最大行数和列数
    EncodeHintType.PDF417_AUTO_ECIBoolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false" 指定编码PDF417时是否自动插入eci。请注意,在这种情况下,将为输入中的不属于ISO-8859-1字符集的字符选择最紧凑的字符编码。根据经验,有些扫描仪不支持cp-1256(阿拉伯语)这样的编码。在这种情况下,可以通过CHARACTER_SET编码提示将编码强制为UTF-8
    EncodeHintType.AZTEC_LAYERSInteger
    String
    可以使用Integer或String,但是String必须是整数指定Aztec code所需的层数。负数(-1、-2、-3、-4)指定一个紧凑的Aztec code。0表示使用最小层数(默认值)。正数(1,2,..32)指定一个普通的(非紧凑的)Aztec code。
    EncodeHintType.QR_VERSIONInteger
    String
    可以使用Integer或String,但是String必须是整数指定要编码的QR码的确切版本。
    EncodeHintType.QR_MASK_PATTERNInteger
    String
    可以使用Integer或String,但是String必须是整数指定要使用的二维码掩码图案。允许的值为0到QRCode.NUM_MASK_PATTERNS-1。默认情况下,代码将自动选择最佳掩码模式。
    EncodeHintType.QR_COMPACTBoolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false" 指定二维码是否使用压缩模式。请注意,在执行压缩时,将为输入中不属于ISO-8859-1字符集的字符选择最紧凑的字符编码。根据经验,有些扫描仪不支持cp-1256(阿拉伯语)这样的编码。在这种情况下,可以通过CHARACTER_SET编码提示将编码强制为UTF-8。
    EncodeHintType.GS1_FORMATBoolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false" 指定是否应该将数据编码为GS1标准。
    EncodeHintType.FORCE_CODE_SETString有效值为"A", "B", "C" 将使用哪种编码的力。目前仅用于code -128代码集(类型字符串)。此选项与CODE128_COMPACT互斥。
    EncodeHintType.FORCE_C40Boolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false" 强制C40编码数据矩阵。这个选项和DATA_MATRIX_COMPACT是互斥的。
    EncodeHintType.CODE128_COMPACTBoolean
    String
    可以使用Boolean或String,但是String必须是"true" or "false" 指定code -128代码是否使用紧凑模式。这可以产生略小的条形码。此选项和FORCE_CODE_SET是互斥的。

    4.MultiFormatWriter(对条形码内容编码)

    /*
     * 它为请求的BarcodeFormat查找适当的Writer子类,并用提供的内容对条形码进行编码。
     *
     * @param contents	条形码内容
     * @param format 	条形码格式
     * @param width		条形码宽度
     * @param height	条形码高度
     * @param hints		条形码图片自定义配置(非必填)
     * @return 条形码
     */
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix bitMatrix = writer.encode(content, format, width, height, hints);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5.MatrixToImageWriter(将BitMatrix写入BufferedImage、文件或流。)

    //设置二维码颜色(非必填,默认黑白)
    MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
    //将二维码转成图像缓冲区类
    BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
    BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
    //将二维码写入文件中(writeToFile已不建议使用)
    File file = new File("a.png");
    MatrixToImageWriter.writeToFile(bitMatrix, "png", file);
    MatrixToImageWriter.writeToFile(bitMatrix, "png", file, matrixToImageConfig);
    MatrixToImageWriter.writeToPath(bitMatrix, "png", file.toPath());
    MatrixToImageWriter.writeToPath(bitMatrix, "png", file.toPath(), matrixToImageConfig);
    //将二维码写入流中
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
    MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream, matrixToImageConfig);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    YOLOv7改进:新颖的上下文解耦头TSCODE,即插即用,各个数据集下实现暴力涨点
    【使用教程】Github(自用)
    “穷人”才去大厂卷?
    【蜂鸟E203内核解析】Chap.1 RISC-V指令集架构与硬件结构)
    Django自定义视图类及实现请求参数和返回参数加解密
    【SLAM中的问题相关解决方案】
    Linux——权限
    超详细的ROC曲线绘制教程
    两个输入数组的非单一维度必须相互匹配
    内核不中断前提下,Gaussdb(DWS)内存报错排查方法
  • 原文地址:https://blog.csdn.net/weixin_44972575/article/details/126904693