zxing生成二维码去白边

news/2025/1/12 20:42:07/

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

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



http://www.ppmy.cn/news/665150.html

相关文章

POI填充Excel背景色

一、填充颜色 HSSFWorkbook workbook new HSSFWorkbook();HSSFCellStyle style workbook.createCellStyle();//设置单元格颜色style.setFillForegroundColor(HSSFColor.LIME.index));//设置填充样式&#xff08;实心填充&#xff09;&#xff0c;不设置填充样式不会有颜色sty…

Word 边框刷使用方法

选中一个单元格&#xff0c;右键->边框样式->边框取样器->点击你需要的样式边框 然后直接将此边框样式刷至其他位置即可。

ai导出无白边

2019独角兽企业重金招聘Python工程师标准>>> 导出时&#xff0c;勾选&#xff08;□使用画板&#xff09;箭头所指的地方。 转载于:https://my.oschina.net/u/583531/blog/1622881

影像去除黑边或白边的三种方法

最近拿到了一个不规则tif格式的数据&#xff0c;需要处理成地图服务供项目加载&#xff0c;初步拿到数据导入arcmap时发现数据有白边&#xff0c;如果不处理直接切片加载到项目中&#xff0c;会出现如下图的情况。 通过尝试&#xff0c;最终总结出三种方法&#xff0c;三种方法…

网页外出现白边的处理方式

我们常常在写网页的时候会遇到框架超出网页布局的情况 作为一个新手 我看了很多文章 这里做个总结 1.制作你的网页 然后把它窗口缩小看看会不会出现某些块超出网页范围 2.如果出现 判断是哪一个元素 如果判断不出来可以在css里插入下面这几句代码帮助 *{outline: solid #f00 1…

图片去白边、使边界透明的实现和扩展

本文由 lonelyrains 出品&#xff0c;转载请注明出处。 文章链接&#xff1a; http://blog.csdn.net/lonelyrains/article/details/9243179 1、采用cximage库来做这件事。下载源代码&#xff0c;编译所有的lib和dll 2、打开demo工程&#xff0c;在demo\demoView.cpp的void C…

开发技术-修正二维码白边

1、现状&#xff1a; 在前后端代码都一样的情况下&#xff0c;不同服务器上&#xff0c;生成二维码白边间距不一样。 扒拉了下先前伙伴写的代码&#xff0c;定义了二维码整体的宽和高&#xff0c;但是并没有定义最外围白边的区域。 从网上找了一段代码&#xff0c;亲测可用 …

解决全屏Blur白边问题

还是在写vtuber-music时候遇到的这个问题&#xff0c;背景的全屏图片需要模糊&#xff0c;但是反复论证filter: blur()只能作用于窗口范围&#xff0c;不能通过margin或者top&#xff0c;left的方式顶出去&#xff0c;而backdrop的方式性能差而且兼容性又不好&#xff0c;所以试…