Объект типа PngImageFile не поддерживает сериализацию в формате JSON - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь сделать наложение изображения.Я использую спутниковые данные для изучения феномена над Аргентиной, но я действительно хотел использовать интерактивную карту через фолиум.Пока что при создании изображения я получаю вывод.Но когда я пытаюсь наложить спутниковое изображение на базовую карту, я получаю сообщение об ошибке:

Объект типа 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

1 Ответ

0 голосов
/ 23 апреля 2019

Из документации для folium.raster_layers.ImageOverlay параметр image должен быть « строковым, файловым или массивоподобным объектом »:

изображение ( строка, файл или массивоподобный объект ) - данные, которые вы хотите нарисовать на карте.* Если строка, она будет записана непосредственно в выходной файл.* Если файл, то его содержимое будет преобразовано как встроенное в выходной файл.* Если он похож на массив, он будет преобразован в строку 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:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...