python画微信公众号首图
- 前言
- 代码
- 效果预览
- 代码解读
- 展望
前言
从2017年8月23日以来,一直在微信公众号“三行科创”给小朋友们写关于数学知识,数学文化的东西,一篇文章写完后要给文章配一张好看的封面
封面就是这篇文章的门面,我大约经历过3个阶段,第一个阶段百度找图,利用关键词找出相关的图片,然后保存到本地,再通过微信公众号后台传上去,每次都会被裁剪掉一大部分信息,有时候找不到合适的图就干脆建立一个空白画布,写几个正楷字当封面,之后知道有在线的美图秀秀,于是学会了把下载好的图片,通过美图秀秀来进行缩放,图片缩放比例总是不够满意,要么边溢出,要么宽溢出,要么丢掉一部分信息,效果也不尽如人意,十分恼火,今天突发奇想,想着用python写一个程序,把微信公众号首图的模式固定下来,方便以后写公众号。主要有两个思路
今天主要讲一下第一种思路,这里主要利用python的绘图模块matplotlib,首先新建一个空白画布,然后在画布合适的位置(居中)把标题排列出来,最后保存到本地,经查阅微信公众号首图要求,可以上传一个不超过5M的图片,且图片尺寸要是2.35:1的尺寸,可以像素换算为900px*383px,有了这些参数就可以做文章了。
代码
# -*- coding: utf-8 -*-"""
Created on Sat Nov 2 16:33:16 2019
project name: 微信公众号首图
@author: 帅帅de三叔
"""
import matplotlib.pyplot as plt #导入绘图模块
plt.rcParams['font.sans-serif']=['SimHei'] #中文显示
plt.rcParams['axes.unicode_minus']=True #显示负号
import mpl_toolkits.axisartist as axisartist #导入坐标轴加工模块
fig=plt.figure(figsize=(2.35,1)) #建立画布
ax=axisartist.Subplot(fig,111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax) #将绘图区对象添加到画布中
ax.axis[:].set_visible(False) #隐藏原来的实线矩形
plt.text(0.35,0.8,"负数", fontsize=17,style='italic',color='mediumvioletred') #设置字体大小颜色和款式
plt.text(0.45,0.48,"的", fontsize=12,style='italic',color='mediumvioletred')
plt.text(0.25,0.1,"运算法则", fontsize=17,style='italic',color='mediumvioletred')
plt.show() #显示预览
plt.savefig("公众号首图.png",dpi=800) #保存图片
效果预览
代码解读
首先利用函数 plt.figure(figsize=(2.35,1)) 建立一个2.35:1的空白画布,这时候空白画布四周是由带尺度的黑线围成的,所以需要导入坐标轴加工工具axisartist类,调用 ax.axis[:].set_visible(False) 函数把画布四周的框去掉,这时候就真的变成一张2.35:1纯白画布了,接下来就是向画布添加你想要添加的元素,最简单的就是把今天的推文标题再写一遍,比如我今天要推送的文章是《负数的运算法则》,那么我会拆成“负数”,“的”和“运算法则”三部分变成三个独立的操作对象,用 plt.text(x,y,“content”,fontsize,style,color,*) 函数分别打上去便是,然后细心调整字体大小,款式,颜色和对齐方式等参数使得效果看起来不那么单调, 最重要的是位置和字体大小要协调,位置可以通过参数 x,y 来调节,而字体大小可以通过 fontsize来调节,最后用 plt.savefig() 函数把做好的首图保存到本地即可。
展望
这种方法不仅可以画微信公众号首图,而且可以用来画数学公式,这时候只需要将参数 content 改成LaTeX语法即可,是不是很酷呀。
参考文献