我正在编写代码以从URL下载图像,然后在base64
中对该图像进行编码。代码的相关部分是:
dlimage = requests.request("GET", imageURL)
encodedImage = ("data:" + dlimage.headers['Content-Type'] + ";" + "base64," + base64.encodestring(dlimage.content))
结果输出为:
data:text/html;base64,PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0id2hpdGUiPg0KPGNlbnRlcj48aDE+NDAzIEZvcmJpZGRlbjwvaDE+PC9jZW50ZXI+DQo8aHI+PGNlbnRlcj5uZ2lueDwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0K
相关图片为JPEG
。那么为什么标题会说text/html
?我使用其他工具转换图像,字符串完全不同。
答案 0 :(得分:1)
该文件不是一个JPEG文件。
JPEG file以字节0xFF,0xD8,0xFF开头。在变为/9j/
的base64编码中(使用Python 3.6的IPython中的示例):
In [1]: start = b'\xff\xd8\xff'
In [2]: base64.b64encode(start).decode('ascii')
Out[2]: '/9j/'
由于base64编码的字符串开始不同,因此它不是JPEG文件。
解码内容:
In [3]: base64.b64decode('PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPg0KPGJvZHkgYm
...: djb2xvcj0id2hpdGUiPg0KPGNlbnRlcj48aDE+NDAzIEZvcmJpZGRlbjwvaDE+PC9jZW50ZXI+DQo8aHI+PGNlbnRlcj5uZ2
...: lueDwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0K')
Out[3]: b'<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body bgcolor="white">\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'
您无法访问该图片...