前段时间项目中需要用到替换二维码功能,作为一个人新人,不知道从何做起,还好有百度。
百度大多都说 pyzbar /zxing + qrcode 用这三个库进行开发,我试了试都是些基础操作,项目里想用还要修改一下
大家可以去看看python3解析生成二维码
我直接上代码再给大家说吧!
puzbar:解析二维码
def analysis(self, img_url):
res = requests.get(img_url)
new_img = Image.open(BytesIO(res.content))
new_img = ImageEnhance.Brightness(new_img).enhance(1.5) # 增加亮度
new_img = ImageEnhance.Sharpness(new_img).enhance(5.0) # 锐利化
enh_col = ImageEnhance.Color(new_img)
color = 2.5
new_img = enh_col.enhance(color)
new_img = ImageEnhance.Contrast(new_img).enhance(3.0) # 增加对比度
new_img = new_img.convert('L') # 灰度化
barcodes = pyzbar.decode(new_img)
# 解析二维码
# 二维码跳转路径
data = ''
if barcodes:
for barcode in barcodes:
# 二维码路径
barcodeData = barcode.data.decode("utf-8")
# print(barcodeData)
data = barcodeData
return data
img_url是我的图片路径,我是用requests获取的服务器的图片地址,所以用的字节流,要是大家只是想自己测试其实可以写死本地路径。pyzbar.decode(new_img)是主要的可以识别到二维码里面的东西,比如扫描一个认得微信码就会跳转路径到添加到通讯录,说白了就是识别内容,其他什么增加对比,增加亮度只是为了更好识别。这里有个坑,如果大家只是本地就不要用requests了直接image.open(img_url)就可以了,我只是做项目才这么写的!
如果解析出来内容就设置字符编码,如果没事别出出来barcodes 就会是空字符串‘’,可以做其他处理。在这里多说一句,其实qyzbar的识别度比zxing低就是说有些难度的二维码zxing可以识别出来,但是pyzbar就不行,所以大家自己想想用那个,但是我找了好多地方没有找到python3的zxing库,所以只能用了pyzbar。如果大家谁找到了,麻烦私信我一下[email protected]邮箱
qecode:生成二维码
def create_code(self, content=None):
for i in range(10):
fill_color_num = self.getColor() # 设置颜色
# 设置二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 添加二维码跳转路径
qr.add_data(content)
# 开启设置二维码颜色
qr.make(fit=True)
# 设置二维码颜色
img = qr.make_image(fill_color="white", back_color=fill_color_num)
# 保存二维码
date = time.time()
num = random.randint(0, 9999)
# 获取项目路径保存二维码
file_path = self.rootPath+"static\\temporary_image\\" + str(int(date))+str(num) + ".jpg"
img.save(file_path)
# 显示保存后的二维码
img.show()
我这里先设置了二维码的颜色self.getColor()方法,大家可以自己去设置我把我设置的颜色代码放在这了。以便大家使用!
# 设置16进制颜色
def getColor(self):
arr = ["#7B68EE", "#800000", "#FF4500", "#556B2F", "#006400", "#2F4F4F", "#4682B4", "#00008B", "#000080",
"#191970", "#4B0082", "#DC143C", "#008080", "#808000", "#CD853F", "#8B4513", "#A0522D", "#8B0000",
"#8B008B", "#FF0000"]
# 打乱排序
random.shuffle(arr)
str_num = ''
num = random.randint(0, 19)
str_num += arr[num]
return str_num
这是我获取项目路径的方法:
rootPath = curPath[:curPath.find("项目名称\\") + len("项目名称\\")]
我这一会下生成10张二维码图片,并且颜色不一样。方法的参数content是刚才解析二维码解析出来的东西,只需要调用解析二维码方法进行进行接收返回值然后把接收的值代参到这个方法就行了,qr.add_data(content)这个方法是把解析出来的东西放进二维码,举列加入解析出来的是http://www.baidu.com那么你生成的二维码进行扫描就会跳转到百度!
其实也没什么难度,从我一开始的那个链接里面和我这个差不多我也是学习了别人的加上自己的才做出来的。希望能帮助到大家吧。这也是我的第一篇文章,有意见或建议的请邮箱联系我吧![email protected]
总结:
万事开头难,有心可成事!