Android 彻底解决zxing生成条码两边空白问题

本文介绍了如何解决zxing在Android环境下生成条码时出现的两边空白问题。通过修改源码,调整计算条码宽度的方法,并提供完整解决方案,无论是否使用特定库,都能有效处理条码边距。分析了问题根源,发现是由于编码过程中精度丢失导致,通过减少输出宽度的差值使得边距为0。
摘要由CSDN通过智能技术生成

解决源码

不耽误大家时间,直接上解决代码

依赖:

implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'

解决方法

/**
     * 参考OneDimensionalCodeWriter源码中对于条码边距的计算
     * @param width    条码宽度
     * @param contents 条码内容
     */
    private int getNewWidth(int width, String contents) {
   
        Code128Writer code128Writer = new Code128Writer();
        boolean[] code = code128Writer.encode(contents);

        int inputWidth = code.length;
        int outputWidth = Math.max(width, inputWidth);
        int remain = outputWidth % inputWidth;
        return outputWidth - remain;
    }

生成条码

Bitmap bitmapBar = QRCodeEncoder.syncEncodeBarcode(contents, getNewWidth(width, contents), height, 0);
imageView.setImageBitmap(bitmapBar);

复制上面那个方法,生成条码的时候重新计算一遍条码宽度,生成出来的条码就不会有两边空白的问题,对于条码的识别没有任何影响,在项目中已得到验证。

如果没有使用bga-qrcode-zxing库生成条码的话,还要增加如下代码

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);

完整方法如下

/**
     * 同步创建条形码图片
     *
     * @param content  要生成条形码包含的内容
     * @param width    条形码的宽度,单位px
     * @param height   条形码的高度,单位px
     * @param textSize 字体大小,单位px,如果等于0则不在底部绘制文字
     * @return 返回生成条形的位图
     */
    public static Bitmap syncEncodeBarcode(String content, int width, int height, int textSize) {
   
        if</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值