上周,收到了几个有趣的问题邀请,其中一个就是要把二维码直接打印到控制台。

原问题链接:https://www.zhihu.com/question/49258470/answer/115082640

众所周知,WINDOWS的控制台只能输出字符,所以问题实际上就转变为把二维码转成字符。

还记得网上各种大神都写过的字符画代码么?其实就是类似的思路。

from PIL import Image加载这个模块就够用了。

实际写的过程,我们发现,每张二维码图片的大小不同,它每个方格的实际像素大小也不同,所以我们需要先计算每个方格的大小,然后每间隔那么大小的位置,取一个像素来计算就可以了。

研究二维码图片,发现左上角的正方形图形里面,再左上角切出来正好就是整幅图有效方块的大小,那么只需要计算这个方块大小即可:

#计算每个方块的大小像素

def get_cell_size(x,y,x2,y2):

for j in range(x,x2):

for i in range(y,y2):

pix = im.getpixel((j,i))

if pix[:3]==(255,255,255):

return j - x #每个黑色格子的像素点大小

def get_cell():

flag = 0

for y in range(HEIGHT):

for x in range(WIDTH):

pix = im.getpixel((x,y))

if pix[:3]==(0,0,0) and flag==0: #出现第一个黑色像素

x1=x

flag = 1

if pix[:3]==(255,255,255) and flag ==1 : #出现第一个白色像素(意味着左上角的标记方块横向结束)

flag = 2

cell = get_cell_size(x1,x1,x,x)

return cell

计算完方块大小,就可以每隔这个方块大小,取一个像素点来判断是黑色还是白色:

def get_qrcode(cell):

height = int(HEIGHT/cell)

width = int(WIDTH/cell)

code=''

for y in range(height):

for x in range(width):

pix = im.getpixel((x*cell,y*cell))

if pix[:3]==(0,0,0):

code += '▇'

if pix[:3]==(255,255,255):

code += ' '

code += '\n'

print(code)

输出后发现:每行的间隔有点大,造成无法扫描二维码,调整一下控制台字体:

然后把输出的内容选中反色,就可以扫描了,当然,也可以直接修改布局颜色为白底黑字:

(某快餐是否要给点广告费啊,上图二维码是随便网上搜索出来的,并不是广告。)

完整代码如下,抛砖引玉,看看还有没有别的更好的方法来计算:

from PIL import Image

#计算每个方块的大小像素

def get_cell_size(x,y,x2,y2):

for j in range(x,x2):

for i in range(y,y2):

pix = im.getpixel((j,i))

if pix[:3]==(255,255,255):

return j - x #每个黑色格子的像素点大小

def get_cell():

flag = 0

for y in range(HEIGHT):

for x in range(WIDTH):

pix = im.getpixel((x,y))

if pix[:3]==(0,0,0) and flag==0: #出现第一个黑色像素

x1=x

flag = 1

if pix[:3]==(255,255,255) and flag ==1 : #出现第一个白色像素(意味着左上角的标记方块横向结束)

flag = 2

cell = get_cell_size(x1,x1,x,x)

return cell

def get_qrcode(cell):

height = int(HEIGHT/cell)

width = int(WIDTH/cell)

code=''

for y in range(height):

for x in range(width):

pix = im.getpixel((x*cell,y*cell))

if pix[:3]==(0,0,0):

code += '▇'

if pix[:3]==(255,255,255):

code += ' '

code += '\n'

print(code)

input('...')

if __name__ == '__main__':

IMG = '123.png'

im = Image.open(IMG)

WIDTH = im.width

HEIGHT = im.height

get_qrcode(get_cell())

如何将文字转换为二维码 python_用python将二维码转换成字符直接输出控制台相关推荐

  1. c语言将一幅画转换为字符画,C#将图片转换成字符画

    先看一下效果图 在Main方法中调用(首先要添加程序集System.Drawing,然后引入命名空间System.Drawing) ConvertToChar(new Bitmap(@"D: ...

  2. Python----凯撒密码、将字符转换成ASCLL函数、将ASCLL码转换成字符函数

     ord(查询的字符):         查询字符的ASCLL码 chr(需要转换的ascll码):         将ASCLL相应数值的数转换成字符 xxyw=input() xxmw='' fo ...

  3. 计算机系统的图形图像编码方式,只有将数字、文字、图像、声音和视频等不同类型的信息转换成_______代码,才便于计算机加工和处理。...

    只有将数字.文字.图像.声音和视频等不同类型的信息转换成_______代码,才便于计算机加工和处理.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容, ...

  4. 暴风转码转超清文件_qlv文件怎么转换成mp4?三个办法会一个就不愁视频转换啦...

    在我们日常娱乐和日常工作中,有时间会观看并下载一些视频.腾讯视频QLV格式,只能用腾讯独有的腾讯视频软件才能播放.那我们有什么办法可以将这QLV格式转换成我们通常用的视频格式呢,如MP4格式呢.那怎么 ...

  5. python画二维图_使用python绘制二维图形示例

    我就废话不多说了,直接上代码吧! import matplotlib.pyplot as plt #也可以使用 import pylab as pl import matplotlib.font_ma ...

  6. python绘制二维图形_使用python绘制二维图形示例

    我就废话不多说了,直接上代码吧! import matplotlib.pyplot as plt #也可以使用 import pylab as pl import matplotlib.font_ma ...

  7. asic码转16进制c语言,十六进制数转换成ascii码

    本文收集整理关于十六进制数转换成ascii码的相关议题,使用内容导航快速到达. 内容导航: Q1:一个十六进制数转换成ASCII码的单片机程序 HASC:MOVA,R0:从R0中取一个16进制(二进制 ...

  8. c语言将字母转换成ascii码,c语言函数toascii()怎么把整数转换成合法的ASCII码字符...

    c语言函数toascii()怎么把整数转换成合法的ASCII码字符?函数需要引入的头文件:#include 定义toascii()函数:int toascii(int c); toascii()函数使 ...

  9. python制作二维码_利用Python制作二维码

    利用简单的Python代码制作二维码 友情链接:饿了么外卖大红包限时领取 一.制作工具 安装Python环境 + PyCharm编译器. 二.电脑系统 本人win10 + Python3.7.0 + ...

  10. 用python制作二维码_使用python制作二维码

    python-qrcode是个用来生成二维码图片的第三方模块,主要依赖的是 PIL 模块和 qrcode 库.(PIL模块只支持python2.7及以下版本,python3之后无法使用,官方推荐pyt ...

最新文章

  1. 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
  2. vba 窗体所有组件 enabled_Csharp设计闪烁窗体制作教程
  3. 这些知识点你会吗?redis的分布式布隆过滤器含答案解析
  4. Java RMI(1):HelloWorld篇
  5. Spring Cloud微服务实战:外卖订餐系统
  6. linux php运行用户名和密码,Linux实例(一)使用用户名密码验证连接Linux
  7. .netCHARTING图表控件详细介绍及下载
  8. python kafka获取最新的offset
  9. Python--详解Python中re.sub
  10. AI 假冒老板骗取 173 万!
  11. OpenStack点滴01-概览
  12. mysql分布式数据库_分布式数据库搭建详细教程
  13. 对抗生成网络(Generative Adversarial Network, GAN)
  14. 视频人像磨皮插件:Beauty Box 4.2
  15. elastic serach学习
  16. Java实现合成图片
  17. 30 行代码实现,支付宝蚂蚁森林自动收能量!
  18. Keil 中“last line of file ends without a newline”的解决
  19. 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛) Jumping Monkey(并查集,逆向考虑)
  20. Windows常见扩展名介绍

热门文章

  1. python exec 函数_Python之浅谈exec函数
  2. web服务器软件有哪些?带你快速了解
  3. MOS管和IGBT有什么区别?别傻傻分不清了
  4. ECMAScript 2022 正式发布
  5. 你的电脑能装化学绘图软件ChemDraw吗?
  6. 想知道表格文字识别怎么弄?分享2个表格识别的方法
  7. 基于pyod中机器学习与神经网络方法的异常值识别方法合集(含2022年全国服务外包大赛实例)
  8. cryEngine5.3打包
  9. LeetCode 108. 将有序数组转换为二叉搜索树
  10. Mysql(3):事务、锁及锁级别