frombytes
frombytes
# 原方法
def frombytes(mode, size, data, decoder_name="raw", *args):
pass
# 示例代码
import requests
from PIL import Image
content = requests.get("http://my.cnki.net/Register/CheckCode.aspx?id=1563416120154").content
image = Image.frombytes(mode="RGBA",size=(64,25),data=content,decoder_name="raw")
该代码会抛出异常
ValueError: not enough image data
- 经查找资料(https://stackoverflow.com/questions/8328198/pil-valueerror-not-enough-image-data) 得知该图片为jpg格式,包括了图片的原始(jpg压缩后的)数据和(jpg)文件头,而frombytes只能读取纯二进制数据
解决方案
from io import StringIO,BytesIO
import requests
from PIL import Image
content = requests.get("http://my.cnki.net/Register/CheckCode.aspx?id=1563416120154").content
image = Image.open(BytesIO(content))
将Image对象转成bytes或者BytesIO
imgByteArr = BytesIO()
image.save(imgByteArr,format="PNG")
imgByteArr.getvalue()