在昨天的文章用 Python 制作头图 1.0 中,介绍了如何使用 Python 来生成头图。但昨天的脚本还不够好用,所以今天来让他变得更好用。
我们在编写公众号的时候,公众号的头图可以选择的一个是两个样式,一个是 900*383 的横幅图片,另一个是 1:1 的正方形图片,一般情况下,这两个图都会是基于一个图来完成的,但在实际的使用过程中,可能会因为图片布局的问题而无法很好的展现。这里要感谢我在上一份工作中的同时 @boqunwu,给我分享了如何让这两个图可以更好的展现。
简单来说就是,可以生成一个长方形图 + 正方形图的方式,来让这个更好用。 就像下面这样
如果你生成了这样的图片,那么就可以在选择图片的时候,根据实际的需要,选择不同大小的位置,从而让你主图和副图可以很好的展示内容。
因此,今天我们来编写代码,来生成这样的图片
环境依赖
今天的实现是在昨天的基础之上实现了,因此,你只需要保证你安装好了 Pillow 就可以执行今天的代码
pip install pillow
实现思路
想要实现我们想要的效果,则需要在代码中生成一个 900x383 + 383x383 的图片,从而实现我们想要的效果
因此,我们可以在代码中加入我们想要的文本内容,在一张画布上来生成多个区域,分别作为我们需要的图片内容。
代码实现
# coding=utf-8
from PIL import Image, ImageDraw, ImageFont
# 定义变量
ctx_bg_color = (255, 255, 255)
bg_size = (900, 766)
# 大图配置
big_image_size = (900, 383)
big_text = "用 Python 制作头图 v1.1"
big_text_color = "#eeeeee"
big_image_bg_color = "#fca652"
big_text_font_size = 80
# 小图配置
small_image_size = (383, 383)
small_image_color = "#ac4b1c"
small_text = "Python"
small_text_color = "#eeeeee"
small_text_font_size = 80
# 逻辑实现
# 定义画布
export_image = Image.new("RGB", bg_size, ctx_bg_color)
# 生成文本样式
big_text_font = ImageFont.truetype("NotoSansSC-Medium.otf", big_text_font_size)
small_text_font = ImageFont.truetype("NotoSansSC-Medium.otf", small_text_font_size)
# 计算大图文字尺寸
big_text_width = big_text_font.getsize(big_text)
big_text_coordinate = int((big_image_size[0] - big_text_width[0]) / 2), int(
(big_image_size[1] - big_text_width[1]) / 2 - 20)
# 计算小图文字尺寸
small_text_width = small_text_font.getsize(small_text)
small_text_coordinate = int((small_image_size[0] - small_text_width[0]) / 2) + 0, int(
(small_image_size[1] - small_text_width[1]) / 2 + 383)
img_draw = ImageDraw.Draw(export_image)
img_draw.rectangle((0, 0, 900, 383), big_image_bg_color, big_image_bg_color)
img_draw.rectangle((0, 383, 383, 766), small_image_color, small_image_color)
img_draw.text(big_text_coordinate, big_text, font=big_text_font, fill=big_text_color)
img_draw.text(small_text_coordinate, small_text, font=small_text_font, fill=small_text_color)
export_image.show()
export_image.save("export-big.jpg", quality=95)
总结
和昨天相比,今天我们对代码进行了一定的优化,这些优化可以让我们的文章的头图开始有了一些不一样,但在实际使用过程中,我们还是会发现,使用似乎不是那么方便,明天我们将对这个代码进行下一步优化。
你觉得这个脚本还有哪些地方可以优化呢?
此外,今天的头图就是用脚本生成的,你可以试试看看他在你信息流中和分享到朋友圈中的效果是否一致?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。