本帖最后由 小太阳 于 2016-7-13 13:55 编辑
转换二维码
字符串转二维码的软件很多,算法介绍也不少,web开发中应用比较多的是jQuery的qrcode插件:
https://github.com/jeromeetienne/jquery-qrcode,我们按照WeX5的require规范引用即可。1 require("jquery.qrcode.min.js"); 2 container.qrcode({ 3 text : txt 4 }); 创建二维码的方法如上:container为上文定义的二维码容器,由于默认二维码的尺寸是256*256,容器的尺寸要比二维码大;text为需要放入二维码中的字符串。插件也提供了更多的设置参数:
1 render : "canvas", //设置渲染方式,还有以table方式渲染 2 width : 256, //设置宽度 3 height : 256, //设置高度 4 typeNumber : -1, //计算模式 5 correctLevel : QRErrorCorrectLevel.H,//纠错等级 6 background : "#ffffff",//背景颜色 7 foreground : "#000000" //前景颜色 默认的渲染方式为canvas,也就是会生成一个canvas元素,tabel方式是使用表格排出一个二维码,效率较低。当然,咱们用的是高效的canvas。 但是canvas生成的不是图片,在微信中长按也是不会被识别出来的,所以需要将canvas转换成图片格式。canvas转换成图片的API也有几种,这里我用的是简单粗暴的 toDataURL(“image/png”)方法。
1 var imgSrc = $('canvas').hide()[0].toDataURL("image/png"); 2 $('.cd-img').attr("src", imgSrc); 如果jQuery用的不多的话可能会出点小问题,要注意jQuery都是对元素数组进行操作,而具体的方法如toDataURL(“image/png”)则是元素的方法,所以需要指定下标 0。还有一点需要注意的就是用户可能会修改,所以每次生成二维码前都要记得进行一次canvas的清理:$(‘canvas’).remove(); 然后,然后我们就完成了这个小应用的开发啦。
增加点玩法 由于二维码中央位置是不保存信息的,所以可以在中间加入自己的图像。注意调试一下不要超出范围即可。看起来终于没那么单调了,女生们平常加班P的照片可以排上用场啦: 黑白色的二维码不够选,那就变点颜色呗,按照插件的参数配置一下:
1 container.qrcode({ 2 text : txt, 3 background : "#000", //背景颜色 4 foreground : "#3690ec" //前景颜色 5 }); 耍酷的路上没有终点: 既然插件已经开源了,那要做渐变颜色也是相当简单的。首先,我们可以猜测它的实现原理,应该是整个canvas被划分成很多小块,再分别对这些小块绘制前景色背景色,横竖两个循环下来就可以得到完整的二维码了。那显然,只要我们控制画笔的前景或者背景色做渐变就可以得到渐变效果了。要改源码,那就不能用压缩版了,这里我们引入两个源文件,然后修改jquery.qrcode.js这个文件。 在var createCanvas = function() 函数内,找到设置画笔的语句: 1 ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background;
这个语句很好懂,就是判断这个小块的值去采用前景色或者背景色绘制,在这句语句之前加入一句: 1 options.foreground = qrcode.isDark(row, col) ? 'hsla(' + (row * 2) + ', 100%, 40%, 1)' : options.foreground; 这里采用的是hsla格式的颜色来控制渐变,一般来说所有的颜色渐变都适合用hsla格式,只控制色调变化既可实现渐变,相当好用。 到这里就完成了二维码名片应用的本地开发啦,下面来看看如何将它做成一个可以在微信内传播的公众号应用吧。 |