Python怎么生成二维码,python写二维码生成器
上周收到几个有趣的问题,其中一个是直接把二维码打印到控制台上。
原问题链接:https://www.zhihu.com/question/49258470/answer/115082640
众所周知,WINDOWS的控制台只能输出字符,所以问题实际上变成了将二维码转换成字符。
你还记得网上各路大神写的人物画的代码吗?其实也是类似的想法。
从PIL导入镜像加载这个模块就足够了。
在实际的书写过程中,我们发现每个二维码图片的大小是不一样的,每个方块的实际像素大小也是不一样的,所以我们需要先计算出每个方块的大小,然后每隔一个像素计算出那个大小的位置。
研究二维码图片,发现左上角的正方形图形,再在左上角剪出,正好是整张图片有效正方形的大小,所以你只需要计算出正方形大小:
#计算每个方块的像素大小
def get_cell_size(x,y,x2,y2):
对于范围(x,x2)中的j:
对于范围内的I(y,y2):
pix=im.getpixel((j,I))
如果pix[:3]==(255,255,255):
返回j-x #每个黑色网格的像素大小
def get_cell():
标志=0
对于范围内的y(高度):
对于范围内的x(宽度):
pix=im.getpixel((x,y))
如果pix[:3]==(0,0,0)且flag==0: #第一个黑色像素出现
x1=x
标志=1
如果pix [:3]==(255,255,255)且flag==1: #第一个白色像素出现(意味着左上角的标记方块水平结束)
标志=2
单元格=获取单元格大小(x1,x1,x,x)
返回单元格
计算正方形大小后,可以每隔一个正方形大小取一个像素来判断它是黑还是白:
def get_qrcode(单元格):
height=int(高度/单元格)
width=int(宽度/单元格)
代码=
对于范围内的y(高度):
对于范围内的x(宽度):
pix=im.getpixel((x*cell,y*cell))
如果pix[:3]==(0,0,0):
代码=
如果pix[:3]==(255,255,255):
代码=
代码=\n
打印(代码)
输出后发现每行间隔有点大,无法扫描二维码。调整控制台字体:
然后选择输出内容反色,就可以扫描了。当然,您也可以直接将布局颜色修改为白底黑字:
(一家快餐要不要出点广告费?上图中的二维码是在网上随便搜出来的,不是广告。)
完整的代码如下。让我们看看是否有其他更好的计算方法:
从PIL进口图片
#计算每个方块的像素大小
def get_cell_size(x,y,x2,y2):
对于范围(x,x2)中的j:
对于范围内的I(y,y2):
pix=im.getpixel((j,I))
如果pix[:3]==(255,255,255):
返回j-x #每个黑色网格的像素大小
def get_cell():
标志=0
对于范围内的y(高度):
对于范围内的x(宽度):
pix=im.getpixel((x,y))
如果pix[:3]==(0,0,0)且flag==0: #第一个黑色像素出现
x1=x
标志=1
如果pix [:3]==(255,255,255)且flag==1: #第一个白色像素出现(意味着左上角的标记方块水平结束)
标志=2
单元格=获取单元格大小(x1,x1,x,x)
返回单元格
def get_qrcode(单元格):
height=int(高度/单元格)
width=int(宽度/单元格)
代码=
对于范围内的y(高度):
对于范围内的x(宽度):
pix=im.getpixel((x*cell,y*cell))
如果pix[:3]==(0,0,0):
代码=
如果pix[:3]==(255,255,255):
代码=
代码=\n
打印(代码)
输入( . ))
if __name__==__main__ :
IMG=123.png
im=Image.open(IMG)
宽度=im.width
高度=im.height
get_qrcode(get_cell())
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。