【问题标题】:How to display image from API response in Jupyter Notebook?如何在 Jupyter Notebook 中显示来自 API 响应的图像?
【发布时间】:2019-04-15 04:06:05
【问题描述】:

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

- API 调用:

import requests
from ipywidgets import Image

url = "https://atlas.microsoft.com/map/static/png"

querystring = {
    "api-version":"1.0",
    "subscription-key":"<myRedactedAPIkey>",
    "layer":"basic",
    "zoom":"5",
    "center":"-122.3950336,47.566848",
    "height":"600",
    "width":"600",
    "pins":"default||-121.95066667 45.9135|-121.062 46.707",
    "format":"png",
    "path":"ra300||-122.3950336 47.566848"
}

payload = ""
headers = {
    'cache-control': "no-cache"
    }

response = requests.request("GET", url, data=payload, headers=headers, params=querystring)

print(response.text)

结果:

�PNG

IHDRX�f��sRGB���gAMA���a    pHYs���o�d��IDATx^��wt,K~�  �2ÕYqGg4+�iGsVgGg5Z�ќ]IT�Rs9\J䈤4r$r%�a���nv������}��wͻ������{[�By�20U\�6��@T"
��
�A�E��ֵ���|�%۶��O�N�#���dX��F��Y�p����y�l3�T�8;�Y�p�O҉#�վ8���yf����+5.����@0���q���Jތ�k��(�5�О���u���gBl�=�E���@�J����m=f�k&h��^��Z��Ms��̊\�J���if��C��:2_ <etc.>

想要:

有什么建议吗?谢谢。

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

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))

【问题讨论】:

  • 你试过用response.raw代替文字吗? (stackoverflow.com/questions/13137817/…)。
  • 添加response.raw 代替print(response.text) 得到&lt;urllib3.response.HTTPResponse at 0x7f0f4752df98&gt; 但没有.png。

标签: image jupyter-notebook png ipywidgets azure-maps


【解决方案1】:

以下是最终的工作: 出现stream=allIpython.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))

【讨论】:

    【解决方案2】:

    由于response.text 似乎是一个有效的PNG 图像,并且您正在使用ipywidgets Image,您是否尝试使用它?

    widgets.Image(
        value=response.text,
        format='png',
        width=300,
        height=400,
    )
    

    【讨论】:

    • 嗯。将其固定到最后会产生相同的二进制文本输出。
    • 你可以试试这个:display(Image(BytesIO(r.content))) 吗? (BytesIO 来了from io import BytesIO
    猜你喜欢
    • 2018-12-21
    • 2021-12-18
    • 2012-08-04
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    相关资源
    最近更新 更多