今天遇到了二维码生成的图片需要切掉白边的情况,查看之前的二维码生成代码,发现有这么一行

hints.put(EncodeHintType.MARGIN, 1);

感觉应该是设置边距的意思,果断改成

hints.put(EncodeHintType.MARGIN, 0);

发现其实并不能去掉白边。

于是百度找到方案:

private static BufferedImage getNormalQRCode(String content) throws WriterException {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.CHARACTER_SET, CHARSET);hints.put(EncodeHintType.MARGIN, 1);BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);//调用去除白边方法bitMatrix = deleteWhite(bitMatrix);int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK //int 0: WHITE //int 255);}}return image;}
ImageIO.write(image, "jpg", response.getOutputStream());  private static BitMatrix deleteWhite(BitMatrix matrix) {int[] rec = matrix.getEnclosingRectangle();int resWidth = rec[2] + 1;int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);resMatrix.clear();for (int i = 0; i < resWidth; i++) {for (int j = 0; j < resHeight; j++) {if (matrix.get(i + rec[0], j + rec[1]))resMatrix.set(i, j);}}return resMatrix;}

搞定

最近项目里需要生成一些二维码,使用之后发现一些问题,生成之后的图片,白色边框区域太大了,导致二维码内容区域太小。
百度了一下,有人说设置EncodeHintType.MARGIN属性即可,这个属性值为1-4,实际测试发现并没有什么卵用。(顺便说一下,一些比较老的版本中,这个EncodeHintType只有CHARACTER_SET和ERROR_CORRECTION两种属性设置,比较新的库才新增了其他属性,我这里使用的是3.0版本)
后来找到另外一个解决办法:自己手动去除黑边,代码如下:public static Bitmap Create2DCode(String str, int width, int height) {try {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.MARGIN, 1);BitMatrix matrix = new QRCodeWriter().encode(str, BarcodeFormat.QR_CODE, width, height);matrix = deleteWhite(matrix);//删除白边width = matrix.getWidth();height = matrix.getHeight();int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = Color.BLACK;} else {pixels[y * width + x] = Color.WHITE;}}}Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;} catch (Exception e) {return null;}}private static BitMatrix deleteWhite(BitMatrix matrix) {int[] rec = matrix.getEnclosingRectangle();int resWidth = rec[2] + 1;int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);resMatrix.clear();for (int i = 0; i < resWidth; i++) {for (int j = 0; j < resHeight; j++) {if (matrix.get(i + rec[0], j + rec[1]))resMatrix.set(i, j);}}return resMatrix;}

zxing生成二维码去白边相关推荐

  1. zxing 生成二维码,可设置logo、二维码颜色、白边大小

    主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...

  2. 用ZXING生成二维码的工具类(可以去掉白边,添加logo)

    ===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /**  * @auther g ...

  3. Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)

    说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...

  4. 使用zxing生成二维码

    使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址.文本等)生成二维码并放在该位置, 最后加上立牌编号. 步骤: 1).做好背景图,如下图: 扫一扫添加关注 2).生成二维码 ...

  5. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

  6. Zxing生成二维码思路和源码解析

    Zxing生成二维码思路和源码解析 本博文是一篇介绍google zxing包生成二维码的思路和它的源码的文章. 一.引入 如何调用zxing的代码生成一个二维码呢?主要的函数只有一个,如下所示: B ...

  7. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  8. 五十九、使用ZXing生成二维码

    @Author:Runsen @Date:2020/7/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. 27.用zxing生成二维码

    先在idea里面导入jar包 链接:https://pan.baidu.com/s/1UdorNg8o0A4FsElghqkJyw 提取码:c4bt 复制这段内容后打开百度网盘手机App,操作更方便哦 ...

最新文章

  1. 自适应游标共享技术01(Adaptive Cursor Sharing)
  2. Activity与Fragment的生命周期详解
  3. Android 架构组件 - 让天下没有难做的 App
  4. 如何让squid实现动态缓存
  5. bgl 词典_器材屋 篇五十二:“哪里不会点哪里”的后时代——哪里不识扫哪里:科大讯飞扫描词典笔评测_点读机...
  6. Python中的shuffle()函数的使用
  7. 提高redis cluster集群的安全性,增加密码验证
  8. Quartz使用总结、Cron表达式
  9. 一篇文章看懂Java并发和线程安全
  10. 从零开始,CentOS6安装ghost博客
  11. H5文本复制到剪切板
  12. 如何测试光纤系统中的插入损耗
  13. iOS程序员必读之热门书单
  14. Latex论文写作各种小问题
  15. 流上机器学习,星环科技Sophon Base助力海洋石油富岛工艺监测智能化
  16. Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程
  17. Android 自定义底部上拉控件的实现
  18. 油烟净化器如何判断质量好坏?
  19. Struts2的 两个蝴蝶飞 你好 (一)
  20. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java图书推荐系统93gei

热门文章

  1. 只有数据分析师才能看懂的十大吐槽
  2. 国内互联网公司梯队划分,百度掉队!阿里,腾讯,华为第一挡 !
  3. 软件获取imei和imsi_imei和imsi
  4. Photoshop中图层叠加效果的算法
  5. TFT1.44驱动显示RCT6 通过6线SPI可以正常显示,而c8t6 白屏,代码互相移植导致的下载失败的问题
  6. android:手搓一个即时消息聊天框(包含消息记录)
  7. 车用瞬态抑制二极管的特性及防护过程讲解
  8. 【PTA】7-2 国王的奖励——分数取模、分治思想、快速幂、int64的乘法模运算【C/C++】
  9. A Modified Particle Swarm Optimizer
  10. 鸿蒙系统 吹上天了,余承东吹的牛再次成真!鸿蒙系统实现新功能,谷歌始料不及...