我尝试将图像添加到folium弹出窗口,但失败了。我使用python 2.7版本和folium 0.50版本。
实际上,我在其他帖子中提到了页面提及,但它仍然不起作用
http://nbviewer.jupyter.org/gist/ocefpaf/0ec5c93138744e5072847822818b4362
import folium
import base64
m = folium.Map(location = [33, -97], zoom_start = 6, tiles = "Mapbox Bright")
encoded = base64.b64encode(open('IMG_1769.JPG', 'rb').read()).decode()
html = '<img src="data:image/jpeg;base64,{}">'.format
iframe = folium.IFrame(html(encoded), width=632+20, height=420+20)
popup = folium.Popup(iframe, max_width=2650)
marker = folium.Marker([30,-100], popup=popup).add_to(m)
m.add_child(marker)
m.save("test.html")
答案 0 :(得分:0)
我一直关注this example,它(几乎)为我工作。由于encoded
变量是字节数组而不是字符串,因此无法正确进行 base64解码绘图,从而生成了 b'iVBOR
标头,而不是 iVBOR
标头(PNG标头的base64
版)。
将html(encoded)
替换为html(encoded.decode('UTF-8'))
可以解决此问题。
这是输出。
这是代码段。
fig, ax = plt.subplots(figsize=(width, height))
ax = subdf.plot(x='date', y='temperature', ax=ax, legend=False)
ax.set_ylabel('Temp (°C)')
png = '/tmp/temperatures_{}.png'.format(counter)
fig.savefig(png, dpi=resolution)
encoded = base64.b64encode(open(png, 'rb').read())
html = '<img src="data:image/png;base64,{}">'.format
#print(20*'-',encoded.decode('UTF-8'))
iframe = IFrame(html(encoded.decode('UTF-8')), width=(width*resolution)+20, height=(height*resolution)+20)
popup = folium.Popup(iframe, max_width=2650)
icon = folium.Icon(color="red", icon="ok")
marker = folium.Marker([lat, lon], popup=popup, icon=icon)
marker.add_to(marker_cluster)
答案 1 :(得分:0)
import base64
from folium import IFrame
#Add Marker
encoded = base64.b64encode(open('mypict.jpg', 'rb').read())
html = '<img src="data:image/png;base64,{}">'.format
iframe = IFrame(html(encoded.decode('UTF-8')), width=400, height=350)
popup = folium.Popup(iframe, max_width=400)
folium.Marker(location=[43.591545, 39.728056], tooltip=html, popup = popup,
icon=folium.Icon(color = 'gray')).add_to(map)