После нескольких дней исследований, думаю, я нашел решение. Кроме того, я хочу подвести итог этапам создания значков SDF.
Во-первых, сначала расскажем, что такое SDF простыми словами: SDF - это растровый формат, оптимизированный для отображения измененных размеров, перекрашенных , и повернутые растровые изображения. Они одноцветные.
Использование: Это мое первое взаимодействие с SDF в MAPBOX.
Причина в том, что мы не можем изменить цвет значка (если svg или обычный растр png) в слое символов, для этого вам необходимо предоставить формат SDF (специализированный png). (https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#paint -symbol-icon-color )
How to создать?
- Npm модуль: https://www.npmjs.com/package/image-sdf Команда:
image-sdf input.png --spread 10 --downscale 1 --color black > output.png
Imagemagick:
https://imagemagick.org/script/download.php. ImageMagick позволяет сделать это одной командой:
convert in.png -filter Jinc -resize 400% -threshold 30% \( +clone -negate -morphology Distance Euclidean -level 50%,-50% \) -morphology Distance Euclidean -compose Plus -composite -level 45%,55% -resize 25% out.png
Что я делал не так?
Ответ: Перед выполнением команды image-sdf на png (обратите внимание: это должен быть черно-белый растровый контур). Измените размер (увеличьте) примерно до 40-50%.
Как и в моем случае, я изменил размер обычного растрового png, и результат был потрясающим. Посмотри. (Обратите внимание: я не менял ни слова в коде и использовал ту же команду image-sdf)
введите описание изображения здесь