QR 码是二维条码的一种,QR来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。
QR 码 比普通条码可存储更丰富的信息,包括对文字、URL 地址和其他类型的数据加密,亦无需像普通条码般在扫描时需直线对准扫描器。
QR码呈正方形,只有黑白两色。在3个角落中印有较小的“回”字正方图案,这3个是帮助解码软件定位的图案,用户可不需要对准扫描,任意角度数据都能被正确读取。
学Python用qrcode代码自动生成二维码,再也不用找草料:https://cli.im/ 来生成二维码装逼了
准备工作:
需要使用qrcode库和PIL库,对此没安装的需要安装一下
安装qrcode:命令行窗口输入 pip install qrcode
安装PIL库:pip install pillow
到此可以开始敲代码了
二维码生成只需要三行代码:
import qrcode #导入qrcode库
img = qrcode.make("https://blog.csdn.net/suoyue_py") #生成二维码的网址(文本也行)
img.save("suoyue.png") #生成二维码后保存的图片名
此处有坑: 代码保存,命名文件时不能为 “qrcode.py”,因为 import 时相当于把自己 import 了,故必须修改为非 “qrcode.py”(改为大写的Q都行~~)。
否则运行时会报错:
AttributeError: ‘module’ object has no attribute ‘make’
注意: 保存二维码(图片)需要调用PIL库,故需要安装pillow库,否则也是会报错的
解决小bug后运行正常可在同一文件夹下找到生成的二维码
进阶版:生成带logo的二维码
import qrcode
from PIL import Image
import os,sys
#参数 string:二维码字符串;path:生成的二维码保存路径;logo:logo文件路径
def gen_qrcode(string,path,logo=""):
qr = qrcode.QRCode(
version=2, #控制二维码的大小:(25*25)
error_correction=qrcode.constants.ERROR_CORRECT_H, #ERROR_CORRECT_H:30%的字码可被容错
box_size=8, #控制二维码中每个小格子包含的像素数
border=1 #控制边框(二维码与图片边界的距离)包含的格子数(默认为4)
)
qr.add_data(string)
qr.make(fit=True)
img = qr.make_image()
img = img.convert("RGBA")
if logo and os.path.exists(logo):
try:
icon = Image.open(logo)
img_w, img_h = img.size
except Exception as e:
print(e)
sys.exit(1)
factor = 4
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
icon = icon.resize((icon_w,icon_h),Image.ANTIALIAS)
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
icon = icon.convert("RGBA")
img.paste(icon,(w,h),icon)
img.save(path)
#调用系统命令打开图片
# xdg-open :在用户的首选应用程序中打开文件或url
os.system('xdg-open %s' % path)
if __name__ == "__main__":
info = "https://blog.csdn.net/suoyue_py" #生成二维码的网址
pic_path = "qrsuoyue.png" #生成二维码保存的图片名
logo_path = "logo.png" #生成二维码所用的图标
gen_qrcode(info,pic_path,logo_path) #调用函数
error_correction: 控制二维码的错误纠正功能。
可取值下列 4个常量:
1.ERROR_CORRECT_L: 7%的字码可被容错
2.ERROR_CORRECT_M(默认): 15%的字码可被容错
3.ERROR_CORRECT_Q: 25%的字码可被容错
4.ERROR_CORRECT_H: 30%的字码可被容错
二维码的容错系数(上面所指的 error_correction)越高,生成的二维码则可允许的残缺率越大,且二维码的数据主要保存在图片的四个角上,所以在二维码中间放一个小图标,对二维码的识别也是不受多大影响的