google zxing生成的二维码有时候会出现留白太多

google zxing生成的二维码有时候会出现留白太多,特别丑,也不适合打印。

跟踪后发现是QRCodeWriter中QRCode code = Encoder.encode(contents, errorCorrectionLevel, hints); 生成的QRCode的width和height 与 期望的相差太大,然后renderResult方法生成的BitMatrix对象就会存在大量的留白。

解决办法:

在QRCodeWriter类调用renderResult之前重新设置width和height,将留白控制在某个数值以内,如10像素
  /**
   * 因为renderResult方法存在leftPadding和topPadding留白特别大的问题, 重新计算1个更合理的二维码宽度
   * @param inputWidth, 二维码时间的宽度 
   * @param width, 二维码包括留白一起总共的宽度
   * @param quietZone, 默认间隙
   * @return, 合理的二维码的宽度
   */
  private static int getWidth(int inputWidth, int width, int quietZone) {
    if(width != inputWidth) {
        int max = Math.max(width, inputWidth);
        int min = Math.min(width, inputWidth) + quietZone * 2;
        if(max % min > quietZone * 2) {
            width = min*(max / min + 1);
        }
    }
    return width;
  }


        // 解决二维码留白有可能太大的问题,先修改width和height以控制留白
        width = getWidth(input.getWidth(), width, quietZone);
        height = width;
        return renderResult(code, width, height, quietZone);

如果想控制最终生成的二维码图片的尺寸保持原来的不变,则可以在ImageIO.write()之前对BufferedImage进行缩放为原来的尺寸即可。

网上也有另外一种方法: 修改BitMatrix对象  https://blog.csdn.net/zengrenyuan/article/details/80282578

你可能感兴趣的:(google zxing生成的二维码有时候会出现留白太多)