谁能帮我把this base64 data变成图像?我不知道是因为数据没有正确解码,还是其他什么原因。以下是我对数据进行解码的方式:
import base64
c_data = { the data in the link (string type) }
c_decoded = base64.b64decode(c_data)
但它给出了错误的填充,所以我遵循了一些教程,并尝试了不同的方法来解码数据。
c_decoded = base64.b64decode(c_data + '=' * (-len(c_data) % 4))
c_decoded = base64.b64decode(c_data + '=' * ((4 - len(c_data) % 4) % 4)
这两种方法都是在没有错误填充的情况下对数据进行解码,但现在我无法将解码后的数据转换为图像。
我尝试创建一个空的PNG,然后将解码的数据写入其中:
from PIL import Image
with open('c.png', 'wb') as f:
f.write(c_decoded)
image = Image.open('c.png')
image.show()
它不起作用并给出错误:无法识别图像文件‘c.png’
我尝试过使用BytesIO:
from PIL import Image
import io
from io import BytesIO
image = Image.open(io.BytesIO(c_decoded))
image.show()
现在它给出错误:无法识别图像文件<_io.BytesIO对象位于0x0000024082B20270>
请帮帮我。
2条答案
按热度按时间w6lpcovy1#
不确定您是否确实需要一个Python解决方案,或者您只是想像您问题的第一行所说的那样,需要帮助解码您的图像,并且您认为可能需要Python。
如果是后者,只需在终端使用ImageMagick即可:
或等同地,避免*“无用的猫”*:
如果是前者,您可以使用如下代码(未经测试):
现在
im
包含PNG编码的[^1]图像,因此您可以按如下方式保存到磁盘:或者,您可以将其 Package 在
BytesIO
中,然后打开到PIL Image
中:[^1]:请注意,我盲目地假设它是PNG,它可能是JPEG,所以理想情况下,您应该查看DataURI的开头,以确定用于保存文件的合适扩展名。
kmbjn2e32#
感谢@jps解释了为什么我的代码不能工作。查看@Mark Setchell解决方案,了解解码Base64数据的可靠方法(他的代码修复了@JPS指出的我的错误)
因此,基本上删除了Base64字符串开头的[Data:Image/png;Base64,],因为它只是数据的格式。更改这一点:
对此:
现在我们可以利用