在昨天的文章用 Python 制作头图 1.0 中,介绍了如何应用 Python 来生成头图。但昨天的脚本还不够好用,所以明天来让他变得更好用。
咱们在编写公众号的时候,公众号的头图能够抉择的一个是两个款式,一个是 900*383 的横幅图片,另一个是 1:1 的正方形图片,个别状况下,这两个图都会是基于一个图来实现的,但在理论的应用过程中,可能会因为图片布局的问题而无奈很好的展示。这里要感激我在上一份工作中的同时 @boqunwu,给我分享了如何让这两个图能够更好的展示。
简略来说就是,能够生成一个长方形图 + 正方形图的形式,来让这个更好用。就像上面这样
如果你生成了这样的图片,那么就能够在抉择图片的时候,依据理论的须要,抉择不同大小的地位,从而让你主图和副图能够很好的展现内容。
因而,明天咱们来编写代码,来生成这样的图片
环境依赖
明天的实现是在昨天的根底之上实现了,因而,你只须要保障你装置好了 Pillow 就能够执行明天的代码
pip install pillow
实现思路
想要实现咱们想要的成果,则须要在代码中生成一个 900×383 + 383×383 的图片,从而实现咱们想要的成果
因而,咱们能够在代码中退出咱们想要的文本内容,在一张画布上来生成多个区域,别离作为咱们须要的图片内容。
代码实现
# 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)
总结
和昨天相比,明天咱们对代码进行了肯定的优化,这些优化能够让咱们的文章的头图开始有了一些不一样,但在理论应用过程中,咱们还是会发现,应用仿佛不是那么不便,今天咱们将对这个代码进行下一步优化。
你感觉这个脚本还有哪些地方能够优化呢?
此外,明天的头图就是用脚本生成的,你能够试试看看他在你信息流中和分享到朋友圈中的成果是否统一?