python解析base64格式的二维码

声明:此文章涉及的代码非原创,是基于https://www.cnblogs.com/JaxYoun/p/13457610.html博客园的python解析base64格式的二维码(笨办法,不推荐)这篇文章做的改进。

        在最近爬取某个需要登录认证的网站时,会在登录后还需要二维码扫码认证,二维码是在账号密码正确的情况下点击登录返回的,返回的是二维码经过base64编码后的数据,考虑到使用selenium效率较低,如果每次爬取的时候都使用浏览器手动登录扫码识别后抓cookie比较麻烦,所有就想到将登录后返回的base64编码的图片直接输出在控制台,每次开始爬取的时候,只需要扫码二维码认证,大大提高效率。

       如果将base64编码的图片直接保存再打开图片扫码,但是电脑每次都会用系统的软件打开图片,每次都特别慢,所以我的思路是将base64编码的图片二维码内容识别出来,再通过qrcode库将二维码直接显示在控制台,如下图结果:

于是在网上搜索python识别base64编码二维码内容如何实现,但找了几天都没有相关方案和代码,使用chatgpt回答给的代码也是各种报错,经过几天的搜索才找到博客园写的相关的文章,但该文章思路是将图片保存到本地后再打开图片进行识别,使用的代码会涉及磁盘IO,影响性能,所以针对此代码做了优化。

原代码

import base64
import pyzbar.pyzbar as pyzbar
from PIL import Image, ImageEnhance

base64Str = "这里放base64编码后的图片数据,不要前面的data:image/png;base64,"

# 1.解码Base64字符串
imgdata = base64.b64decode(base64Str)

# 2.将解析结果以文件形式写入本地磁盘
with open('2.png', 'wb') as f:
    f.write(imgdata)

# 3.打开上一步写道本地磁盘的文件
img = Image.open("./2.png")

img = ImageEnhance.Brightness(img).enhance(2.0)  # 增加亮度
img = ImageEnhance.Contrast(img).enhance(4.0)  # 增加对比度
# img = ImageEnhance.Sharpness(img).enhance(17.0)# 锐利化
# img = img.convert('L')  # 灰度化

# img.show()  #测试用

# 4.调用pyzbar解析二维码
barcodes = pyzbar.decode(img)

# 5.打印二维码解析结果
print(barcodes[0].data.decode("utf-8"))

优化后的代码 

import base64
import pyzbar.pyzbar as pyzbar
from PIL import Image
import io

base64Str = "这里放base64编码后的图片数据,不要前面的data:image/png;base64,"

# 1.解码Base64字符串
imgdata = base64.b64decode(base64Str)
# 2.创建一个BytesIO对象并加载图像数据
stream = io.BytesIO(imgdata)
# 3.打开图像并创建PIL图像对象
img = Image.open(stream)

# 4.调用pyzbar解析二维码
barcodes = pyzbar.decode(img)

# 5.获取并打印二维码解析结果
qr_str = barcodes[0].data.decode("utf-8")

第一次写博文,如有写得不对的地方,欢迎大家进行指正。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值