实现:
1、base64字符串转图片
2、图片验证码进行识别
# Base64ToImage.py
import requests
import base64
def bas64_to_image():
login_url_base64= "或者验证码的url" # 验证码获取url
respose=requests.get(url=login_url_base64).json() # 返回验证码base64字符串
a = captchaImage.replace('data:image/png;base64,', '') # base64字符串验证
missing_padding = 4 - len(a) % 4
if missing_padding:
a += '=' * missing_padding
print(a, file=open('base64.txt', 'w'))
with open('base64.txt', 'r') as f_obj:
b = base64.b64decode(f_obj.read())
file = open('1.png', 'wb') # 转换图片写入,如果是data:image/png,则转换成png格式
file.write(b)
return captchaCode
bas64_to_image()
# ocr.py
import ddddocr # 导入 ddddocr
# 返回验证码
import Base64ToImage
def OcrImg():
ocr = ddddocr.DdddOcr(show_ad=False) # 实例化
with open('1.png', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
return res
print(OcrImg())
可能遇到的问题(以上代码已经解决如下问题)
问题1:
binascii.Error: Invalid base64-encoded string: number of data characters (7121) cannot be 1 more than a multiple of 4
原因:
这个错误提示说明你的Base64字符串长度不是4的倍数,因此无法正确解码。这是因为Base64编码是将3个字节的二进制数据转换为4个字符,如果原始数据长度不是3的倍数,编码器会进行一些填充操作,以便使编码后的字符串长度是4的倍数。
在Python中,使用标准库中的base64模块进行解码时,如果遇到这种情况,会自动将字符串末尾的填充字符去除。但如果去除填充字符后字符串长度仍不是4的倍数,就会出现类似的错误提示。
为了解决这个问题,可以在解码之前手动将Base64字符串的末尾补上适当的填充字符,使字符串长度是4的倍数。填充字符通常为等号=,用于表示数据的结尾。例如,如果字符串长度除以4余1,就需要在末尾添加3个等号;如果余2,就需要添加2个等号;如果余3,就不需要添加任何等号。
问题2:
binascii.Error: Incorrect padding
原因:
有可能是python base64库编码规则不太统一导致的;解决办法就是对base64解码的string补齐等号就可以了;
python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足