微信小程序二维码解析遇到的问题
2017-06-23 17:36
866 查看
最近在做一个从微信小程序api获取到小程序二维码,然后将二维码解析返回给第三方平台,第三方平台再根据链接生成二维码供用户扫码使用,在解析二维码的时候遇到了一些问题,在这里分享一下。
1.开发文档
https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html 在开发文档中可以看到,生成的二维码大概有三种,第一种和第三种有数量限制,由于第一种目前zXing无法解析(可能我版本较低),所以采取的生成第三种小程序二维码的方式,生成出来后是这样的(width入参是430,返回结果是一个二维码的二进制流byte[])
2.裁剪处理
由于生成的二维码最下方有一行字(微信扫一扫,使用小程序),导致在解码的过程中报错,目前想到的就是对二维码进行裁剪处理,首先将byte[]转换成BufferedImage再进行裁剪
这里就遇到一个问题,我们对微信的入参是430,而实际上微信接口返回的是470*535dpi的二维码,裁剪过多或者过少都会有问题,这里采用了一定比例裁剪的方式(0.85)
3.解析裁剪后图像
jar包依赖:
解析二维码工具类:
工具类里提供了两种解析方式,一种是流一种是BufferedImage,返回结果是二维码包含的内容:
可以看到该链接比较奇怪,本人猜测微信应该是对小程序二维码扫码时做了特殊处理(直接点击链接是进不去的),但这并不影响,因为我们传给第三方后,第三方会根据同样的规则去根据链接生成二维码,生成之后的二维码扫码结果还是指向这个链接(目前测试没有问题)
1.开发文档
https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html 在开发文档中可以看到,生成的二维码大概有三种,第一种和第三种有数量限制,由于第一种目前zXing无法解析(可能我版本较低),所以采取的生成第三种小程序二维码的方式,生成出来后是这样的(width入参是430,返回结果是一个二维码的二进制流byte[])
2.裁剪处理
由于生成的二维码最下方有一行字(微信扫一扫,使用小程序),导致在解码的过程中报错,目前想到的就是对二维码进行裁剪处理,首先将byte[]转换成BufferedImage再进行裁剪
ByteArrayInputStream inputStream= new ByteArrayInputStream(qrCodeRsp.getResult()); BufferedImage image = ImageIO.read(inputStream); /**裁剪原图 目前访问微信 微信返回的是 470*535 像素 170620*/ BufferedImage subImage = image.getSubimage(0, 0, image.getWidth(), (int) (image.getHeight() * 0.85));
这里就遇到一个问题,我们对微信的入参是430,而实际上微信接口返回的是470*535dpi的二维码,裁剪过多或者过少都会有问题,这里采用了一定比例裁剪的方式(0.85)
3.解析裁剪后图像
jar包依赖:
<dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.2.1</version> </dependency>
解析二维码工具类:
package com.demo.kowalski.utils; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.NotFoundException; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.HybridBinarizer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; /** * Created by Kowalski on 2017/6/16 * Updated by Kowalski on 2017/6/16 */ public class QrCodeUtils { /** * 解析二维码(QRCode) * @param image * @return */ public static String decodeQrcode(BufferedImage image) throws NotFoundException { MultiFormatReader formatReader = new MultiFormatReader(); BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image))); //定义二维码的参数: Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>(); hints.put(DecodeHintType.CHARACTER_SET,"utf-8");//定义字符集 hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); Result result = formatReader.decode(binaryBitmap, hints);//开始解析 return result.getText(); } /** * 流图片解码 * @param input * @return String */ public static String decodeQrcode(InputStream input) throws NotFoundException, IOException { BufferedImage image = ImageIO.read(input); LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Map<DecodeHintType,Object> hints = new LinkedHashMap<DecodeHintType,Object>(); // 解码设置编码方式为:utf-8, hints.put(DecodeHintType.CHARACTER_SET, "UTF-8"); //优化精度 hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); //复杂模式,开启PURE_BARCODE模式 hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); Result result = new MultiFormatReader().decode(bitmap, hints); return result.getText(); } }
工具类里提供了两种解析方式,一种是流一种是BufferedImage,返回结果是二维码包含的内容:
"https://mp.weixin.qq.com/a/~~IDPi5UlUcRc~6N6CY6nW1xdSyX7RhQPnEg~~"
可以看到该链接比较奇怪,本人猜测微信应该是对小程序二维码扫码时做了特殊处理(直接点击链接是进不去的),但这并不影响,因为我们传给第三方后,第三方会根据同样的规则去根据链接生成二维码,生成之后的二维码扫码结果还是指向这个链接(目前测试没有问题)
相关文章推荐
- 小程序开发遇到问题如何联系微信官方
- 微信小程序 豆瓣项目中wx.request遇到的问题
- 微信小程序遇到的问题
- 微信小程序picker组件遇到的问题与解决方案
- 微信小程序在开发中遇到的问题与解决方法
- 微信小程序开发遇到的问题以及解决
- 微信小程序遇到修改数据后页面不渲染的问题解决
- 微信小程序外部API调用方法,遇到的一个小问题
- 微信小程序自学过程中遇到的问题 转
- 微信小程序 setData 的坑 原创 2017年01月01日 17:57:56 标签:微信小程序 30607 最近在使用微信小程序的setData时,遇到了以下问题。如下: 官网文档在使用setD
- 微信小程序开发过程中遇到的问题
- 微信二维码长按无法识别问题解析
- 微信小程序开发中遇到的问题。总结
- 微信小程序开发过程中遇到的问题
- 在微信扫描二维码登录网站和微信授权登录公众平台的WAP网站中遇到的问题
- 微信小程序开发遇到一些问题
- 微信长按二维码遇到的问题
- 微信小程序,配置服务器地址的步骤及配置过程中遇到的问题和解决方案
- 微信红包店小程序开发过程中遇到的问题 php获取附近周边商家 显示最近商家
- 微信新版 分享 登录 分享小程序 遇到 的问题