艺术二维码生成原理和实践

更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer

作者:熊整文

二维码现在是大街小巷的标配设计,只要用手机扫一下就能快速的进入相应的页面,可以跳转到相应页面,或是查看名片、付款、收红包等等。本文依据二维码的生成原理,用艺术图标替代枯燥的黑白二维码,赋予二维码艺术性和鲜活的个性。

一. 二维码原理

二维码 (2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。二维码的优点:二维码存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后可以正常读取);空间利用率高。

如下图所示:

1. 二维码 QR(Quick-Response) code

是被广泛使用的一种二维码,解码速度快。它可以存储多种类型。如下图是一个qrcode的基本结构

2. 艺术二维码

依据二维码的结构特性,加入丰富生动的图案,提升其美观性。其原理就是针对黑白二维码中的黑色码元,用色彩绚丽的图案进行替换。

二. 艺术二维码生成方法

1.生成二维码的原始数据矩阵。

有很多开源的库工具可以直接用来生成二维码的BitMatrix,比如应用较广泛的google提供的zxing库。

代码如下:

2.格式化BitMatrix,找出其中所有码元点,和符合特定矩形形状的码元集合。

按照二维码的原则,在BitMatrix中,先找出左、右、下等3个回字形定位符;然后遍历在BitMatrix,找出所有的码元点,再从码元点中找出特定矩形框(也即实际需求对二维码中要替换成特定图标的矩形框,比如33,23,22,12等)。

bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, 0, 0, hints);

这句是用url链接来生成BitMatrix的,其中要传入需要生成矩阵的宽和高,经过对比,发现这里可以取巧,设置宽和高为0,这样生成的矩阵最小(保证码元点信息无遗漏),每个码元点的宽度为1个单位,后续可以省去再去查找定位符以及计算码元点宽度的步骤。

3.绘制图形。

依据前面两步对BitMatrix的操作,将找出的定位符用符合定位符特征的图片绘制到画布上,再将各个特定矩形框也以相应的宽高尺寸绘制到画布,然后将单个的码元点以简单的图标绘制上去,最后还可以利用二维码的容错机制,在画布的中央小块位置画上个性化的头像。

至此,二维码图片Bitmap就已经生成OK了。

三. 总结

利用二维码的结构特性,将其中连成片的特殊形状用个性化的图片代替,可以使二维码更加美观和生动。

在手Q中,用此方法,实际可用生成面对面红包、付款码等二维码图形。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180115A0DSHE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券