知行编程网知行编程网  2022-01-25 14:43 知行编程网 隐藏边栏 |   抢沙发  28 
文章评分 0 次,平均分 0.0
【导语】:现在都强调个性,那么怎么动手制作自己的个性化二维码呢?本文就跟大家一起探讨制作二维码的方法。

1. 二维码

二维码( 2−Dimensional Barcode),又称二维条形码。它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形来记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。
二维码有其特定的字符集,每个字符占有一定的宽度,每种码具有一定的校验功能,同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。
二维条形码是在二维空间水平和竖直方向存储信息的条形码。它的优点是信息容量大,译码可靠性高,纠错能力强,制作成本低,保密与防伪性能好。
目前,世界上应用最多的二维条码符号有Aztec Code、PDF147、QR Code等。
有趣的二维码:用 MyQR 和 qrcode 制作二维码
常见的二维码为QR CodeCode,QR全称是Quick Response,是一个近几年来移动设备上超流行的一种编码方式。它的结构如下:
有趣的二维码:用 MyQR 和 qrcode 制作二维码
QR Code属于矩阵式二维条码,又称棋盘式二维条码。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。主要有以下特点:
1. 符号规格从版本1(21×21)到版本40(177×177),每提高一个版本,每边增加4个码元(即指构成QR码的方形黑白点);
2. 信息容量大:能存储7089个数字字符或4296个字母字符或2953个8位字节字符或1817汉字字符;
3. 纠错能力强:即使部分编码变脏或破损,也可以恢复数据。L级约可纠错7%的数据码字,M级约可纠错15%的数据码字,Q级约可纠错25%的数据码字,H级约可纠错30%的数据码字;
4. 可以从任意方向读取:QR码可以从360°任一方向均可快速读取。通过QR码中的三处定位图案,可以帮助QR码不受背景样式的影响,实现快速稳定的读取。
2. MyQR
MyQR可以生成常见的二维码、艺术二维码(黑白或彩色), 动态二维码(黑白或彩色),安装命令如下:
<span class="code-snippet_outer"><span style="font-size: 15px;">  pip install MyQR</span></span>
有趣的二维码:用 MyQR 和 qrcode 制作二维码
生成二维码代码如下:
<span class="code-snippet_outer"><span style="font-size: 15px;">if __name__ == '__main__':</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> version, level, qr_name = myqr.run(</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> words='https://xxx.com/ccc',</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> version=1,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> level='H',</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> picture='./XKD.gif',</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> colorized=True,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> contrast=1.0,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> brightness=1.0,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> save_name='test4.gif',</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> save_dir=os.getcwd()</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> )</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">print(version)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">print(level)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">    print(qr_name)</span></span>
MyQR确实是挺好用的,唯一的缺点就是,不支持中文!!!没错,是不是有点遗憾,它只支持以下字符:
  • 数字 0 到 9
  • 大小写的英文字母
  • 常用英文标点符号和空格

3. qrcode

qrcode的功能虽稍逊于MyQR,但是它支持中文字符,且能生成矢量图,安装命令如下:
<span class="code-snippet_outer"><span style="font-size: 15px;">  pip install qrcode</span></span>
有趣的二维码:用 MyQR 和 qrcode 制作二维码
生成二维码代码如下:
<span class="code-snippet_outer"><span style="font-size: 15px;">def mergeImg(img1, img2, flag=True):</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">"""</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> 合并图像</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> :param img1:</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> :param img2:</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> :param flag: True 表示将logo居中, False 表示将logo作为背景图</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> :return:</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> """</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img1_w, img1_h = img1.size</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">if flag:</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img2_w = int(img2.size[0] / 3)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img2_h = int(img2.size[1] / 3)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 缩放logo</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img2 = img2.resize(size=(img2_w, img2_h), resample=Image.ANTIALIAS)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 将logo居中显示</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img1.paste(im=img2, box=(int((img1_w - img2_w) / 2), int((img1_h - img2_h) / 2)))</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img1.save('./test8.png')</span></span><span class="code-snippet_outer"><span style="font-size: 15px;">else:</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img2 = img2.resize(size=(img1_w, img1_h), resample=Image.ANTIALIAS)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 两张图片的size和mode要一致</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 计算公式为out = image1 * (1.0 - alpha) + image2 * alpha</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 这里的背景色就是一种干扰了, 如果将二维码的透明度设置过高会识别不出来</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> out_img = Image.blend(img1, img2, alpha=0.3)</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> out_img.save('./test9.png')</span></span><span class="code-snippet_outer"><br /> </span><span class="code-snippet_outer"><br /> </span><span class="code-snippet_outer"><span style="font-size: 15px;">if __name__ == '__main__':</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> qr = qrcode.QRCode(</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> version=1,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> error_correction=qrcode.constants.ERROR_CORRECT_H,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> box_size=10,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> border=4,</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> )</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> qr.add_data('https://xxx.com/ccc')</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> qr.make(fit=True)</span></span><span class="code-snippet_outer"><br /> </span><span class="code-snippet_outer"><span style="font-size: 15px;"># black green purple orange pink white blue</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># make_image() 返回的是一个PilImage对象</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># 可以使用pillow对它进行图像处理相关的操作</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># img1 = qr.make_image(fill_color="#8A2BE2", back_color="white")</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> img1 = qr.make_image(fill_color="orange", back_color="white").convert('RGB')</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># img1.show()</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"># img1.save('./test6.png')</span></span><span class="code-snippet_outer"><br /> </span><span class="code-snippet_outer"><span style="font-size: 15px;"> img2 = Image.open('./cutcamera.png').convert('RGB')</span></span><span class="code-snippet_outer"><span style="font-size: 15px;"> mergeImg(img1, img2, flag=True)</span></span><span class="code-snippet_outer"><br /> </span>

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享