简体   繁体   English

如何通过python 3.5将base64字节转换为内存中的图像对象

[英]How to convert base64 bytes to an image object in memory by python 3.5

There is an image like [captcha '3xy5m'][1] 有一张类似[captcha'3xy5m'] [1]的图片

[1]: https://i.stack.imgur.com/8aAjg.jpg . [1]: https : //i.stack.imgur.com/8aAjg.jpg

**Its base64 string** is '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'. 

I try the following function to convert it to an image 我尝试以下功能将其转换为图像

def crack_captchatest(base64_code):

f = BytesIO()
f.write(base64.b64decode(base64_code))
f.read()

print(f.getvalue())
image =  Image.open(stringIOModule.StringIO(f.getvalue().decode('utf-8')))
image = np.array(image) 

But it throws an exception : 但是它抛出一个异常

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte. UnicodeDecodeError:'utf-8'编解码器无法解码位置0:无效的起始字节中的字节0xff。

I try many ways to solve it,but it really doesn't work. 我尝试了多种方法来解决它,但是它实际上是行不通的。 I have no idea to solve it. 我不知道要解决它。 Hope someone can help me. 希望可以有人帮帮我。 Thanks in advance. 提前致谢。

you're doing unnecessary conversion to string. 您正在不必要地转换为字符串。 Once decoded, the image data is binary, without any relevance to string type. 解码后,图像数据是二进制的,与字符串类型没有任何关系。

I would "rewind" the virtual file, then pass it directly to Image : 我将“倒带”虚拟文件,然后将其直接传递给Image

f = BytesIO()
f.write(base64.b64decode(base64_code))
f.seek(0)
image =  Image.open(f)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM