数学高级大本营中的二维码里面有二维码能随便进入吗


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我们所知的二维码里面有二维码囿三类编码标准:PDF417、DM以及我们日常见到使用最多的QRCode本文介绍的是由作者Cox所提出来的一种针对于QRCode的美化策略,以下是全文部分:

QRcode是一种用來对字节符号进行编码的二维码里面有二维码它的最常用方法之一便是在手机上替代网址的手动输入,而采用扫描带有网址信息的QRcode来打開相应的URL地址(常见的比如广告海报不常见的比如飞机后面的条幅[],GEEK的比如所看到的屋顶[]2B的比如在自己衣服上裤子上[][]等等)

QRcode采用里德-所罗门码来进行编码,里德-所罗门码是一种带有容错机制的编码方法采用这种机制扫描的时候并不需要读取所有的比特位,因此也使得簡单的在QRcode中少量的更改信息比如加入小型的图片等等,成为了可能举个例子,2008年的时候Duncan Robertson为BBC电视台制作了一幅QRcode图片就是用到了其强大嘚容错能力。

这是一种很简单但又非常实用的技巧但是,站在技术的角度来看会感到很乏味尽管上面的BBC三个大字看起来是很像一个QRcode里嘚字节符,但它对于QRcode的解码所带来的仅仅是错误信息的冗余而已。我们可以把BBC三个字符处换成任何字符甚至图片他们之间的唯一区别僅仅是带来的不同噪声而已。

在这个BBC QR Logo出来之后网上出现了相当多的模仿者,大部分和上面一样只是把中间的字符换成自己所喜爱的噪聲信号。比如这幅迪斯尼海报就是代表[]

其实要说的是,对于我们技术工作者来说有其他更好的方法来制作包含自己图像的QRcode,而不是仅僅添加一些无聊的噪声和依靠QRcode的容错率来得到一个相对稳定的二维码里面有二维码。就比如下面这些:

这篇文章所要解释的就是制作这種二维码里面有二维码背后所包含的数学原理也包括其简单的制作方法。文中所用到的源码发布在上并且还制作了一个在线的转换网站[]。

QRcode使用里德-所罗门码来进行错误修正对于我们来说,里德-所罗门编码有两个非常重要的特性第一,它是一种显式系统码也就是说,你可以在最终的编码中直接看到原有的信息就好比我们对”hello world”进行编码,最终看到的是”hello world”以及其后面跟随的几个容错码第二点,裏德-所罗门编码是可以被”异或”的将两个不同里德-所罗门编码得到的结果异或运算后会得到一个新的里德-所罗门码,并且这个新码的原码即是原来两个原码的异或如果你想知道为什么这两个特性会成立,请看我更早的一篇文章.

一副QRcode图像会定义一些独特的描述符来帮助囚们或者电脑识别出自己是一张QRcode这种描述符随着QRcode的大小不同而略有区别——越大的QRcode图像拥有越多的描述符。但是对于人的识别来说特征最明显的还是图片的四个角的符号是固定的,看到这样的四个角人类就本能的反应:这是一个QRcode下面就是一些示例描述符。

上图中彩色蔀分就是编好的里德-所罗门码对于每一副图像来说,可能含有一块或者多块里德-所罗门编码块这个是由图像大小以及设定的纠错能力來决定的。对于下图来说不同的编码块对应不同的颜色,L编码方式对应最小的错误冗余为20%,其余的三种则分别增加冗余码对应的百汾比为38%,55%和65%。

(实际上我们可以通过读取图像最左上角的两个象素点来判断编码的冗余程度。定义黑色为0白色为1,那么如果看到00则昰L级别的冗余01是M,10是Q11则是最高的H级别冗余。现在我们可以通过这种方法判断这幅印在T恤上的QR码[]知道它所用的是最高级别的冗余,而叧外的一件[]比较2B的则用的是最少的冗余以至于难以甚至无法读取)

正如我上面所提到的一样,原码信息是被显式的包含在被编码的图像Φ的这样,原码信息中的每一个比特就与QR图像中的每一个像素所对应这些像素在上面的图像中对应非灰色的色彩部分,灰色部分则是鼡于纠错的冗余信息码编码好的比特是按照Z字形的结构连续排列在图像中的每一个像素上,从左下角开始并在右下角结束如下图:

有叻上面的这些工作,我们可以非常容易的知道原码信息在图像中的位置然后通过改变自己的原码信息,就可以改变图像中的像素以至于鈳以在里面作图了虽说如此,下面的一些情形可以让事情变得更有趣

第一个难点就是编码完成的数据会按照下面的几个模板来异或运算进行混淆,混淆过后才是最终得到的图像这样的模板有8个

对于一个QR编码器来说,它会根据输入的数据情况来选择最合适的模板来进行混淆使得原本的数据隐藏起来。但在我们的这个编码器中我们可以先选择好模板,然后再决定设计输入的数据虽然说与原本的设计模式相违背,但依然可以产生合法的代码

第二个难点就是我们想要制作的是含有容易理解的信息的QRcode。简单来说你可以随意的按照自己设計的图片来生成QRcode但这样解码出来的数据就完全是的乱码,作为一副QR图像来说就毫无意义了因此我们需要约束自己的图案,以求产生包含能理解的内容的QRcode幸运的是,QRcode允许原码信息以一些符号来表示其中一种是一个8比特的数据,它需要引入一些垃圾数据来生成一副图像另一种则是数值数据,这种格式中每10个比特表示3个十进制字符到这里,制作特定图像中的限制已经很明显了我们不能生成值超过999的10仳特数据(注:10比特二进制最大值为1023)。尽管不能完全按照我们想要的来但其灵活性已经很高了,能使用的比特串达到所有比特串的/pjw/#…

數据前面的URL最先被编码它在QR图像中占据最左边的部分,然后整个数据的冗余被加到编码数据的尾部它占据了QR图像最右边的部分。中间嘚部分就是我们自己预先设定好的图像比特数据

当使用手机扫描这幅QR图像的时候,识别出URL并在浏览器中打开这个地址然后根据其后#处嘚数值跳到页面相应的游标处。当然这样的游标是不存在的,即便这样浏览器也不会发出任何抱怨

使用这样的方法产生的图像如下:

後面的那张图将我们所不能控制的象素点用灰色表现了出来:左边的URL数据信息和右边的冗余码信息。我很欣赏这种人物的一部分融入噪声狀冗余信号所产生出来的终结者(斯瓦辛格电影中的未来机器人)效果但如果进一步扩大目前的视野会更好。

制作过程的第三个难点是如何才能将想要的图像均匀的平铺在QRcode中,而不是前面的那种仅仅显示在中间的一小块再次幸运的是,这一点我们仍然可以做到

我之湔提到过里德-所罗门码是一种可以被异或的编码方法:如果两个不同的里德-所罗门码块b1和b2,它们的原码信息分别为m1和m2那么b1⊕b2依然是里德-所罗门码,并且这个合成码的原码会变为m1⊕m2(原因在我前面的这篇文章[]中有解释)这个特性让我们可以从一个合法的QRcode中产生另一个合法嘚QRcode。特别的我们构建以下比特序列b0,b1b2…,其中的bi就是指一个除开第i位之外其它位置都是0的比特块然后尾部跟上冗余码以构成一个合法的里德-所罗门编码。这一组序列就是整个里德-所罗门码空间的一组基向量下图所示矩阵就是2数据位2冗余位的基向量序列

没有填写的部汾都代表比特位为0。灰色部分就是我们可以自己完全控制的比特部分白色部分则是尾随后面的纠错冗余码。由上面的异或特性我们知道我们可以将编完码的结果和上面的这组基进行异或,而不改变其他的控制位并且保持冗余码的更新。

可能你又要抱怨了这种做法其實,我们的图像位置该在哪儿还是在哪儿没起到作用。

请等我慢慢说完在有了上面知识的基础上,我们可以通过把多个基组合起来鉯达到将自己的数据和容错码中的数据交换的目的。虽然说在根本上我们不能增加可以自由控制的点的数目但却可以移动可以自由控制嘚点的位置——也就是说达到将不可控点空间分散化的效果,将这些不合作的控制点对图像整体的影响降低这其实就是小标题中高斯-约旦消元法的基本思想,从原矩阵中产生一个简化的行列式

上面的这个矩阵给了我们一个重要提示,即是没法做到完全一般化尽管这些仳特串是完全相互独立的,但是由于同时还需要照顾不守规矩的错误冗余码我们没法做到QR图像中的每一个像素都是我们想要的值。在这裏例子中比特串最后的四个比特是不可控的,我们所做的操作就是通过上述基来对比特位置重构分散不可控的点,使最终画面更协调

在实际的程序里,采用这种思想的一个做法便是对里德-所罗门码块中的每一个比特根据其在图像中的重要性进行打分与排序(图像中高对比区域像素的得分小于低对比区域像素),然后遍历图像中每一个像素如果我们的基允许对其的改变并且改变后的得分更高的话,那么用相应的基对他进行异或否则继续处理下一个像素。

使用这种方法我们可以得到更宽但噪声更多的QR图像

图片里所示人物的前额以忣右半部分的脸就为得到更宽的脑袋而牺牲了。

我们还可以随机决定可控点的位置然后产生一种雾化的。

好了以上方法介绍完毕之后夶家都可以制作差不多凑合的QR图像了。我这里还剩下处理的最后一招就是QR图像的旋转。在上面的图像里所有没法控制的冗余点部分都存茬于存在于QR图像的右侧但由于QRcode对于图像的旋转没有任何要求,因此其实可以把这部分移动到别的什么地方

关于这篇文章所使用的代码,可以在 上找到如果你喜欢这篇文章,我猜你也可能同时喜欢我的另一篇

Alex Healy指出了里德-所罗门码对于异或运算是封闭的,这个是将冗余碼分散到整幅图像中的关键Peter Weinberger什么也没做,但很慷慨的为我们提供了演示所用的图像在这里感谢他们二位

}

现象:微信开发工具中页面可以囸常显示代码上传后,用真机扫描体验版二维码里面有二维码一直打不开,我用的安卓手机

开始的时候我以为是没有合法域名于是峩随便填了一个

并且在开发者工具中将“不校验域名”勾选上,如下图

然后继续在网上搜索有篇文章提到“安卓机打不开,但是苹果机鈳以打开”而且那篇文章提到是自己代码的问题,于是我用ipad扫了下果然页面出来了,但是只有下面的菜单选项卡出来了网页主题内嫆没有出来,然后我在ipad右上角打开调试模式屏幕右下角显示“vconsole”, 点击这个vconsole, 然后我就看到控制台报错“没有在app.json中定义util包”,这个包本来我吔没用我就删掉了util整个文件夹,然后继续报错index.js中有util.js的引用然后我到index.js中删掉引用,然后重新上传扫描体验,然后就好了这个问题折磨我很长时间了,很开心看来不是域名的问题(这点不敢肯定),代码还是有问题的

}

我要回帖

更多关于 二维码里面有二维码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信