在昨天的文章用 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)
和昨天相比,今天我们对代码进行了一定的优化,这些优化可以让我们的文章的头图开始有了一些不一样,但在实际使用过程中,我们还是会发现,使用似乎不是那么方便,明天我们将对这个代码进行下一步优化。
你觉得这个脚本还有哪些地方可以优化呢?
此外,今天的头图就是用脚本生成的,你可以试试看看他在你信息流中和分享到朋友圈中的效果是否一致?