Python怎么生成二维码,python写二维码生成器

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: