【python】绘制地图:使用Html2Image生成png图片

原文作者:我辈理想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

Python使用folium制作地图并生成png图片

第一章 folium的方法和类的介绍(思维导图)
第二章 使用folium制作地图
第三章 folium实用功能进阶
第三章 使用Html2Image生成png图片
第四章 使用reportlab制作pdf报告



前言

提示:这里可以添加本文要记录的大概内容:
我讲一下我这个需求的来源,做的项目是一个地理空间查询和使用的系统,通过在前端调用高德地图api创建了一个查询区域,获取区域内的地理数据(数据库)。具体的需求就是,将查询区域和地理数据制作成一个覆盖率分析报告,报告中的其他内容都已完成,但报告中需要展示高德地图、查询区域、地理数据的完整图片这个功能卡了2个星期,主要原因是我对地理空间数据不熟悉,很多python相关库也不清楚,在构建图形的过程中走了很多弯路。
现在将整个实现过程梳理完成,希望对各位同道有帮助,跟其他文章和官网不同,本博客是以使用的优先级来讲解这个库。<我们靠所得来谋生,但靠给予来创造生活>
在这里插入图片描述


一、Html2Image是什么

HTML2Image 是一个轻量级的 Python 包,它充当现有 Web 浏览器无头模式的包装器,从 URL 和 HTML+CSS 字符串或文件生成图像。

大多数 Web 浏览器都有无头模式,这是一种在不显示任何图形界面的情况下运行它们的方法。无头模式主要用于自动测试,但如果您想截取网页的屏幕截图,这些网页与您自己使用浏览器时在屏幕上看到的内容完全相同,也会派上用场。

但是,为了截图,无头模式使用起来不是很方便。HTML2Image旨在隐藏浏览器无头模式的不便,同时添加有用的功能,例如允许从小到一个字符串创建图像。

二、

1.安装和导入库

官网链接:https://pypi.org/project/html2image/

pip install html2image

代码如下(示例):

import html2image as hti

html2image这个库使用是有前提的,无论是windows、MacOS还是linux系统,都需要安装浏览器,因为本人解读了库的源码,就是用了默认的浏览器(即参数browser=‘chrome’),如果你想自己制定浏览器,需要修改2个参browser和browser_executable。
windows下安装chrome谷歌浏览器很容易,从谷歌官网直接下载安装即可,谷歌官网
linux安装chrome谷歌浏览器需要先下载liunx版安装包,参考链接

2.folium获取html内容

​folium是js上著名的地理信息可视化库leafet.js为Python提供的接口,通过它,我们获取了html的内容,数据格式我们转成了str。

import folium

def map2png(map_data,out_file='pdf.png'):
	# 1.直接构造,默认底图
	mo = folium.Map(location=[0, 0])
    # 添加一个点
	folium.Marker(
		location=[45.3311, -121.7113],
		popup="Timberline Lodge",
		icon=folium.Icon(color="green"),).add_to(m)
  	#  添加一个线形   
	folium.PolyLine(
		locations=[[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]],
		color='green', weight=2, opacity=1).add_to(m)
 	# 添加一个面
    folium.Polygon(
	    locations=[[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]], 
		color='green', weight=2, 
		fill=True,fill_color = 'red').add_to(mo)
    mo.fit_bounds([[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]])  # 根据范围缩放地图
    root = mo.get_root()
    html = root.render()  # 这个拿到的就是一个html的内容
    # mo.save('text.html')

3.参数

Html2Image主要有6个参数,

-“browser”:str,可选
+将用于拍摄屏幕截图的浏览器类型。
+默认为Chrome。

-“browser_executable”:str,可选
+浏览器可执行文件的路径。

-“output_path”:str,可选
+保存截图的目录路径。
+默认为当前工作目录。


-“size”:(intint),可选
+屏幕截图的大小。
+默认值为(19201080)。

-“temp_path”:str,可选
+将用于存储临时文件的目录的路径。

-“custom_flags”:strstr的列表,可选
+无头浏览器的其他自定义标志。

4.将html内容转成png图片

覆盖物就是地理空间常用的数据,包括点线面等,数据有多种来源,可以是数据库读出来、文件读出来的、或者网络传输geojson等。

import folium
import os
from pathlib import Path

from html2image import Html2Image

def map2png(map_data,out_file='pdf.png'):
	# 1.直接构造,默认底图
	mo = folium.Map(location=[0, 0])
    # 添加一个点
	folium.Marker(
		location=[45.3311, -121.7113],
		popup="Timberline Lodge",
		icon=folium.Icon(color="green"),).add_to(m)
  	#  添加一个线形   
	folium.PolyLine(
		locations=[[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]],
		color='green', weight=2, opacity=1).add_to(m)
 	# 添加一个面
    folium.Polygon(
	    locations=[[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]], 
		color='green', weight=2, 
		fill=True,fill_color = 'red').add_to(mo)
    mo.fit_bounds([[38.68,115.67],
					[38.85,115.48],
					[38.65,115.37],
					[38.68,115.67]])  # 根据范围缩放地图
    root = mo.get_root()
    html = root.render()  # 这个拿到的就是一个html的内容
    # mo.save('text.html')
    # 2.使用Html2Image将地图html文件转成png
    base = Path(__file__).resolve().parent
    # 以下为Html2Image参数的2中写法,custom_flags参数是网页生成后延迟10秒生成图片(地图加载慢,眼部就会出现空白方块,output_path 是文件生成后存储的文件夹,screenshot为生成图片的方法)
    hti = Html2Image(custom_flags=['--virtual-time-budget=10000', '--hide-scrollbars'])
    hti.output_path = os.path.join(base, 'map_png')
    hti.screenshot(html_str=str(html), save_as='test.png')

总结

提示:这里对文章进行总结:

本博客是以使用的优先级来讲解这个库。<我们靠所得来谋生,但靠给予来创造生活>

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用Python绘制词云图,可以使用Python第三方库`wordcloud`。这个库可以根据给定的文本数据生成词云图。要生成带有背景图片的词云图,可以使用`WordCloud`类的`mask`参数。 以下是一个示例代码,演示如何使用`wordcloud`库生成带有背景图片的词云图: ```python from wordcloud import WordCloud, STOPWORDS import matplotlib.pyplot as plt from PIL import Image import numpy as np # 读取文本文件 text = open('text.txt', 'r', encoding='utf-8').read() # 读取背景图片 background = np.array(Image.open("background.png")) # 创建停用词集合 stopwords = set(STOPWORDS) stopwords.add("said") # 创建词云对象 wc = WordCloud(background_color="white", max_words=2000, mask=background, stopwords=stopwords, contour_width=3, contour_color='steelblue') # 生成词云图 wc.generate(text) # 显示词云图 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() ``` 在上面的代码中,首先使用`open`函数读取文本文件,然后使用`np.array`函数读取背景图片。接着创建停用词集合,用于过滤掉一些常见的词语,比如“said”。然后创建`WordCloud`对象,设置一些参数,比如背景颜色、最大词数、掩膜图片、停用词等。最后使用`generate`方法生成词云图,使用`imshow`方法显示词云图。 注意,该代码中使用了词云图的默认字体。如果你想更改字体,可以在创建`WordCloud`对象时使用`font_path`参数,指定你想要使用的字体文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值