PngImageFile类型的对象不是JSON可序列化的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PngImageFile类型的对象不是JSON可序列化的相关的知识,希望对你有一定的参考价值。
我正在尝试进行图像叠加。我正在使用卫星数据来研究阿根廷的现象,但我真的想通过folium使用交互式地图。到目前为止,在创建图像时,我得到了一个输出。但是,当我尝试将卫星图像覆盖到基本地图上时,我收到一条错误消息:
PngImageFile类型的对象不是JSON可序列化的
我不知道如何解决它。
from PIL import Image
fig.savefig('GS.png', transparent=True)
img = Image.open("GS.png")
import folium
from folium import plugins
m = folium.Map(location=[-31.416016, -64.188929], tiles = 'Stamen Terrain')
folium.raster_layers.ImageOverlay(img,
[[ya.min(), xa.min()], [ya.max(), xa.max()]],
opacity=0.5).add_to(mapa)
mapa
从folium.raster_layers.ImageOverlay
的文档中,image
参数必须是“字符串,文件或类似数组的对象”:
image(字符串,文件或类数组对象) - 要在地图上绘制的数据。 *如果是string,它将直接写在输出文件中。 *如果是文件,它的内容将被转换为嵌入在输出文件中。 *如果是数组,它将转换为PNG base64字符串并嵌入输出中。
在你的代码中,你传递了一个PIL Image
。
img = Image.open("GS.png")
并且Image
不是JSON可序列化的。
尝试将路径传递给图像文件:
import os
img = os.path.abspath("GS.png")
folium.raster_layers.ImageOverlay(
img,
[[ya.min(), xa.min()], [ya.max(), xa.max()]],
opacity=0.5).add_to(mapa)
或者,如果你真的需要PIL Image
,并且因为你已经有了numpy(因为它是folium的依赖),你也可以在传递给Image
之前将ImageOverlay
转换为numpy数组:
img = Image.open("GS.png")
folium.raster_layers.ImageOverlay(
numpy.array(img),
[[ya.min(), xa.min()], [ya.max(), xa.max()]],
opacity=0.5).add_to(mapa)
以上是关于PngImageFile类型的对象不是JSON可序列化的的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是 Streamlit Web 应用程序中的 PngImageFile
如何解析包含多个相同类型的 JSON 对象(不是数组)的 JSON 对象
QuerySet 类型的对象不是 JSON 可序列化的 Django
“Mycart”类型的对象在 Django 中不是 JSON 可序列化的