从前端到后端(生成一个图好难呀)

463 阅读3分钟

他来啦,他来啦,他带着需求走来了,产品经理带着满脸笑意向你走近,把笔记本电脑放在你的面前,指着屏幕说我们的页面展示出的东西需要变成一个word 并支持客户下载,我看了一下页面上用echart生成的图,好像有点不会,本想反抗一下。产品经理按住我,对我说这个做好,我们部门那个*** 给你介绍一下。这听起来还不错!

1. Pyecharts

pyecharts 是一个用于生成 Echarts 图表的类库。 pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。

优势:

美观性:echarts有什么图(2D,not 3D),这个基本就可以实现什么图片的转化;

易用性:对于写python的人来说,实在是舒服,只需要几行代码,就可以实现图片转化;

可扩展性:echarts的群体已经很庞大了,这个python结合echarts的内容,很具有发展方向。

劣势:

参数不熟悉,导致前期调研需要时间,比如图片大小(像素、存储)的控制

生成图片时间过长。(1张图片需要5s,图片很大导致的)

碰到具体问题

Pyecharts生成的图片太大了(大小有5M以上,我们需要将图片大小缩小)

基于Python改变图片像素大小

运行代码前要安装图像处理库pillow,安装命令:

pip install pillow

示例代码:

from PIL import Image

grid.render(path='E:\\pngs\\overlap.png')

im = Image.open('E:\\pngs\\overlap.png')

w, h = im.size

im.thumbnail((w//2, h//2))

im.save('E:\\pngs\\overlap.png', 'png')

总结:Pyecharts生成图片时间过长,客户估计导出下载时间太长不容易接受

2.pygal

Pygal,可导出矢量图的Python可视化利器, 与Django、Flask等Web框架高度集成。

优势:

用法相对简单; 图表可交互性强; 图像可导出SVG格式(矢量图形);

劣势:

暂未发现明显劣势

碰到具体问题

使用pygal的render_to_png生成图片时中文乱码

image.png

查看网络上的解决办法

修改font_family

  • 1)from pygal.sytle import Style
  • 2)定义一个Style对象,设置font_family属性为支持中文的字体
  • 3)pygal绘图时传入该Style对象作为其style属性

在查看时发现这样一句话

若系统中未安装Yahei Consolas Hybrid字体,可以用SimHei代替

引申出来的问题 (可是我怎么发现系统中装了啥字体库尼?????)

查阅书籍看到关于linux系统字体的命令(先安装fontconfig)

查看当前语言

echo $LANG

列出字体列表

[root@blog ~]$ fc-list

列出所有中文字体 #:lang 指定语言

[root@blog ~]$ fc-list :lang=zh

列出所有英文字体:

[root@blog im4]# fc-list :lang=en

添加字体

切换路径到包含你下载到的字体的目录中; 使用 sudo cp *.ttf *.TTF /usr/share/fonts/truetype/ 拷贝到该文件夹

然后执行fc-cache

fc-cache 是一个在 Linux 系统中用于构建字体缓存信息的命令,它主要为使用 Fontconfig 系统的应用程序生成二进制缓存文件。fc-cache 会扫描系统中所有包含字体的目录并生成一个二进制的缓存文件,这样当搜索字体时就可以快速地检索已经生成的缓存文件,而不需要每次都扫描所有的字体目录。这有助于提高查找和渲染字体的速度。通常应该以管理员权限(例如使用 sudo 命令)运行该命令,以确保对系统文件的正确访问权限。