如何在 Jupyter Notebook 中显示来自 API 响应的图像?

Sea*_*ude 1 png image jupyter-notebook ipywidgets azure-maps

我在 Jupyter Notebook 中有一个 Azure Maps API 调用,该调用返回 .png 格式的地图图块。该调用效果很好,但我不知道如何将其显示为图像而不是二进制文本。

\n\n

- API 调用:

\n\n
import requests\nfrom ipywidgets import Image\n\nurl = "https://atlas.microsoft.com/map/static/png"\n\nquerystring = {\n    "api-version":"1.0",\n    "subscription-key":"<myRedactedAPIkey>",\n    "layer":"basic",\n    "zoom":"5",\n    "center":"-122.3950336,47.566848",\n    "height":"600",\n    "width":"600",\n    "pins":"default||-121.95066667 45.9135|-121.062 46.707",\n    "format":"png",\n    "path":"ra300||-122.3950336 47.566848"\n}\n\npayload = ""\nheaders = {\n    \'cache-control\': "no-cache"\n    }\n\nresponse = requests.request("GET", url, data=payload, headers=headers, params=querystring)\n\nprint(response.text)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是:

\n\n
\xef\xbf\xbdPNG\n\nIHDRX\xef\xbf\xbdf\xef\xbf\xbd\xef\xbf\xbdsRGB\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdgAMA\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbda    pHYs\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdo\xef\xbf\xbdd\xef\xbf\xbd\xef\xbf\xbdIDATx^\xef\xbf\xbd\xef\xbf\xbdwt,K~\xef\xbf\xbd  \xef\xbf\xbd2\xc3\x95YqGg4+\xef\xbf\xbdiGsVgGg5Z\xef\xbf\xbd\xd1\x9c]IT\xef\xbf\xbdRs9\\J\xe4\x88\xa44r$r%\xef\xbf\xbda\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdnv\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd}\xef\xbf\xbd\xef\xbf\xbdw\xcd\xbb\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd{[\xef\xbf\xbdBy\xef\xbf\xbd20U\\\xef\xbf\xbd6\xef\xbf\xbd\xef\xbf\xbd@T"\n\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbdA\xef\xbf\xbdE\xef\xbf\xbd\xef\xbf\xbd\xd6\xb5\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd|\xef\xbf\xbd%\xdb\xb6\xef\xbf\xbd\xef\xbf\xbdO\xef\xbf\xbdN\xef\xbf\xbd#\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbddX\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbd\xef\xbf\xbdY\xef\xbf\xbdp\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdy\xef\xbf\xbdl3\xef\xbf\xbdT\xef\xbf\xbd8;\xef\xbf\xbdY\xef\xbf\xbdp\xef\xbf\xbdO\xd2\x89#\xef\xbf\xbd\xd5\xbe8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdyf\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd+5.\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd@0\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdq\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdJ\xde\x8c\xef\xbf\xbdk\xef\xbf\xbd\xef\xbf\xbd(\xef\xbf\xbd5\xef\xbf\xbd\xd0\x9e\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdu\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdgBl\xef\xbf\xbd=\xef\xbf\xbdE\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbdJ\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdm=f\xef\xbf\xbdk&h\xef\xbf\xbd\xef\xbf\xbd^\xef\xbf\xbd\xef\xbf\xbdZ\xef\xbf\xbd\xef\xbf\xbdMs\xef\xbf\xbd\xef\xbf\xbd\xcc\x8a\\\xef\xbf\xbdJ\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdif\xef\xbf\xbd\xef\xbf\xbdC\xef\xbf\xbd\xef\xbf\xbd:2_ <etc.>\n
Run Code Online (Sandbox Code Playgroud)\n\n

想:

\n\n

在此输入图像描述

\n\n

有什么建议吗?谢谢。

\n\n

EDIT2:这是有效的查询。感谢大家的帮助。

\n\n
import requests\nfrom IPython.display import Image, display\n\nurl = "https://atlas.microsoft.com/map/static/png"\npayload = ""\nquerystring = {\n        "api-version":"1.0",\n        "subscription-key":"<myApiKeyRedacted>",\n        "format":"png",\n        "layer":"basic",\n        "zoom":"5",\n        "center":"-122.3950336,47.566848",\n        "height":"600",\n        "width":"600",\n        "pins":"default||-121.95066667 45.9135|-121.062 46.707",\n        "path":"ra300000||-122.3950336 47.566848"\n    }\nheaders = {\n    \'cache-control\': "no-cache"\n    }\n\nr = requests.get(url,data=payload, headers=headers, params=querystring, stream=all)\n\ndisplay(Image(r.content))\n
Run Code Online (Sandbox Code Playgroud)\n

Sea*_*ude 5

stream=all这是最终的工作结果:出现,的组合Ipython.display.content完成了任务。

import requests
from IPython.display import Image, display

url = "https://atlas.microsoft.com/map/static/png"
payload = ""
querystring = {
        "api-version":"1.0",
        "subscription-key":"<myApiKeyRedacted>",
        "format":"png",
        "layer":"basic",
        "zoom":"5",
        "center":"-122.3950336,47.566848",
        "height":"600",
        "width":"600",
        "pins":"default||-121.95066667 45.9135|-121.062 46.707",
        "path":"ra300000||-122.3950336 47.566848"
    }
headers = {
    'cache-control': "no-cache"
    }

r = requests.get(url,data=payload, headers=headers, params=querystring, stream=all)

display(Image(r.content))
Run Code Online (Sandbox Code Playgroud)