zxing生成二维码去白边
今天遇到了二维码生成的图片需要切掉白边的情况,查看之前的二维码生成代码,发现有这么一行
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生成二维码去白边相关推荐
- zxing 生成二维码,可设置logo、二维码颜色、白边大小
主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...
- 用ZXING生成二维码的工具类(可以去掉白边,添加logo)
===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /** * @auther g ...
- Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)
说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...
- 使用zxing生成二维码
使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址.文本等)生成二维码并放在该位置, 最后加上立牌编号. 步骤: 1).做好背景图,如下图: 扫一扫添加关注 2).生成二维码 ...
- java学习-zxing生成二维码矩阵的简单例子
这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...
- Zxing生成二维码思路和源码解析
Zxing生成二维码思路和源码解析 本博文是一篇介绍google zxing包生成二维码的思路和它的源码的文章. 一.引入 如何调用zxing的代码生成一个二维码呢?主要的函数只有一个,如下所示: B ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- 五十九、使用ZXing生成二维码
@Author:Runsen @Date:2020/7/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- 27.用zxing生成二维码
先在idea里面导入jar包 链接:https://pan.baidu.com/s/1UdorNg8o0A4FsElghqkJyw 提取码:c4bt 复制这段内容后打开百度网盘手机App,操作更方便哦 ...
最新文章
- 自适应游标共享技术01(Adaptive Cursor Sharing)
- Activity与Fragment的生命周期详解
- Android 架构组件 - 让天下没有难做的 App
- 如何让squid实现动态缓存
- bgl 词典_器材屋 篇五十二:“哪里不会点哪里”的后时代——哪里不识扫哪里:科大讯飞扫描词典笔评测_点读机...
- Python中的shuffle()函数的使用
- 提高redis cluster集群的安全性,增加密码验证
- Quartz使用总结、Cron表达式
- 一篇文章看懂Java并发和线程安全
- 从零开始,CentOS6安装ghost博客
- H5文本复制到剪切板
- 如何测试光纤系统中的插入损耗
- iOS程序员必读之热门书单
- Latex论文写作各种小问题
- 流上机器学习,星环科技Sophon Base助力海洋石油富岛工艺监测智能化
- Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程
- Android 自定义底部上拉控件的实现
- 油烟净化器如何判断质量好坏?
- Struts2的 两个蝴蝶飞 你好 (一)
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java图书推荐系统93gei
热门文章
- 只有数据分析师才能看懂的十大吐槽
- 国内互联网公司梯队划分,百度掉队!阿里,腾讯,华为第一挡 !
- 软件获取imei和imsi_imei和imsi
- Photoshop中图层叠加效果的算法
- TFT1.44驱动显示RCT6 通过6线SPI可以正常显示,而c8t6 白屏,代码互相移植导致的下载失败的问题
- android:手搓一个即时消息聊天框(包含消息记录)
- 车用瞬态抑制二极管的特性及防护过程讲解
- 【PTA】7-2 国王的奖励——分数取模、分治思想、快速幂、int64的乘法模运算【C/C++】
- A Modified Particle Swarm Optimizer
- 鸿蒙系统 吹上天了,余承东吹的牛再次成真!鸿蒙系统实现新功能,谷歌始料不及...