2017-03-06 111 views
0

我在編寫代碼以從URL下載圖像,然後在base64中編碼該圖像。代碼的相關部分是:使用請求獲取圖像並使用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

這個是什麼值:dlimage.headers [ '內容類型']?它看起來像那個頭文件的值是「text/html」。爲什麼不直接硬編碼你需要的東西,因爲它總是一個圖像。所以而不是dlimage.headers ['Content-Type']你應該有「image/jpeg」 – victor

+0

無法硬編碼圖像/ jpeg,因爲偶爾下載的圖像將是PNG或GIF。 –

+0

然後,該標題有問題。服務器沒有正確設置。你有權訪問服務器端代碼嗎? – victor

回答

0

該文件是而不是一個JPEG文件。

A JPEG file以字節0xFF,0xD8,0xFF開頭。在成爲(在IPython的例子與Python 3.6)/9j/ base64編碼:

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' 

您沒有訪問圖像...