网上找到的二维码大致分为几类:
第一类:微信,微博等开放平台提供的二维码生成。二维码生成有限制,在业务需要大量二维码生成时,不能提供很好的支持。
第二类:免费API。虽然免费,但是都是在线生成,不提供后台API调用做批量处理;或者要批量需要收费;或者链接使用指定链接,由提供商后台做链接跳转。
第三类:开源产品,自己调用API生成二维码图片。
在这里,我们选择第三类,将二维码生成处理成一个内部dubbo服务然后提供出来。
具体思路如下:
业务提供原始URL,然后经由百度短链服务转换为短链,再基于此短链生成二维码。用短链服务的目的是,可以压缩业务原始URL,降低生成二维码复杂度,提升二维码辨识率。
具体代码如下:
基于gradle的依赖:
compile 'com.google.zxing:core:3.2.0'
compile 'com.google.zxing:javase:3.2.0'
JAVA代码如下:
try {
//生成QRcode
BitMatrix matrix = new MultiFormatWriter().encode(shortChain, BarcodeFormat.QR_CODE, 500, 500);
MatrixToImageWriter.writeToPath(matrix, “PNG”, Paths.get(outFileString));
//上传七牛,返回URL
String fileName = UUID.randomUUID().toString()+".png";
File outImage = Paths.get(outFileString).toFile();
qrCode.setImageUrl(FileUploadUtils.saveFileInQiNiu(fileName, outImage).getUrl());
outImage.delete();
} catch (Exception e) {
e.printStackTrace();
}