python自动生成海报_因为懒,我用Python做了一个实验室的海报生成器

完整源码即可通过官方订阅号「二进制」点击链接访问生成工具 «海报[生成器]» 获取。
近几日处于一种自我封闭的状态,在反复思量之后我依然选择坚守内心的想法。今天打算介绍一款在日常生活中屡见不鲜但制作起来却可能一时半会儿想不到的小工具。它的主要功能包括生成带有二维码的卡片或海报。
起因
原本莫名其妙地被导师分配负责管理实验室的今日头条账号,在这个过程中工作内容相对简单明了,主要是由实验室学长学姐负责将翻译好的论文进行转述,并将其发布至该平台的头条位置。完成这些工作后,在最终阶段还需制作相应的宣传素材图版即可完成整个项目任务。

起初我以为不过是发布一篇文章然后借助PS制作个图表就很简单的事情啊可事实发生后我才明白我终究是个"图森破"的人从去年11月开始我就一直在头条号上发表文章到今天从未间断过但这条大型自媒体平台竟然连基本的功能都没有提供令人震惊的是其编辑器界面竟像一个未完成的垃圾 bin从功能上讲它完全无法满足基本的需求它既不支持插入外部图片也不支持显示markdown格式也不提供mathematical formula的支持更别提多级标题了(不要跟我说什么将markdown转换为html再粘贴进头条号编辑器的方法因为那样只会让样式变得一团糟)
扯远了扯远了,回到正题。之前这么多天实现上述需要的主要流程如下:
(采取各种方式优化排版)把文章发布到(不支持各种常用功能的)头条号上
在文章发布之后,在确保内容完整性的前提下进行修改。首先删除多余的信息,并对不重要的细节进行简化处理。确保所有修改后的文本都与原文表达的意思完全一致。
借助Photoshop将封面图、文章标题和文章二维码整合成一个整体后经由邮件发送给老师
在持续了100天的重复操作中感到厌倦之后,在我的印象中真的没有一个工具能够仅凭输入文章链接和标题自动生成海报吗?
经过一整天的努力却未见成效。
常见用于推广的各种海报或卡片样式大体一致,在设计上核心变动点在于二维码的位置和背景图的选择上。为了实现这一目标,在制作过程中只需要准备好背景图的内容,并根据用户提供的二维码信息,在指定位置放置相应的二维码即可。
此次实验的项目结构如下:

在assets目录中存储了一些资源文件,在括号内列出:msyhl.ttc(字体文件)、template.jpg(背景模版图片)。其中output变量表示生成海报的存储路径。
生成带logo的二维码
本次生成二维码基于 PIL 模块与 qrcode 库的支持。官方获取地址为:https://pypi.org/project/qrcode/5.1/。此处不做具体使用方法说明,请有意愿的读者自行查阅官方文档以获取详细信息。为了节省时间与篇幅,在此直接呈现代码片段:具体代码的功能细节请参考注释部分。
生成一个带logo的二维码
defgenerateQRCode(url):
初始化
qr=qrcode.QRCode(
version=5,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8)
添加内容
qr.add_data(url)
qr.make(fit=True)
img=qr.make_image()
img=img.convert("RGBA")
读取logo
icon=Image.open("assets/logo.jpg")
设置logo
img_w,img_h=img.size
factor=4
size_w=int(img_w/factor)
size_h=int(img_h/factor)
icon_w,icon_h=icon.size
ificon_w>size_w:
icon_w=size_w
ificon_h>size_h:
icon_h=size_h
icon=icon.resize((icon_w,icon_h),Image.ANTIALIAS)
将logo并入原二维码中
w=int((img_w-icon_w)/2)
h=int((img_h-icon_h)/2)
icon=icon.convert("RGBA")
img.paste(icon,(w,h),icon)
rgb_im=img.convert('RGB')
保存到指定路径下
today=datetime.date.today()
folder_path='output/'+str(today)
mkdir(folder_path)
rgb_im.save(folder_path+'/qr.jpg')
生成海报
我们先来梳理下,想要生成一张满足我们需求的海报需要哪些元素:
二维码(qrImg)
背景模版图片(template.jpg)
文章标题(postTitle)
和文章有关的封面图(postPic)
为了优化代码的展示效果,请您尝试使用Carbonize这一专业化的解决方案。它能够通过清晰展示代码逻辑,并提供专业的可视化界面设计帮助您更好地进行分析与调试。

经过仔细阅读这段代码后才意识到整体思路清晰明了:首先获取所需素材文件(包括二维码和标题),接着将其放置于特定区域。其中较为复杂的部分在于确定最佳放置位置这一环节,在此方面无法提供替代方案, 只能通过尝试来解决
Tips
我想提一下的是关于PIL库中如何调整图片尺寸的问题。主要是为了调整图片尺寸的地方主要是通过postPic.thumbnail((width/1.5, height/1.5))这个功能来实现的。实际上,在PIL库中还有一个叫做resize的方法也是用于调整图片尺寸的。那么它们之间有什么不同之处呢?
通过PIL生成缩略图采用两种方式:resize和thumbnail。主要区别在于resize方法会生成一个新的图像对象,而thumbnail操作则会对原有图像进行处理。该方法将覆盖原始图像。
fromPILimportImage
im=Image.open('a.jpg')
im.size# 原图尺寸
(3264,2448)
id(im)
140253860921640
resize_im=im.resize((100,100))
resize_im
id(resize_im)
140253862077720
thumb_im=im.thumbnail((100,100))
thumb_im
经thumbnail处理后,在获取resize结果时>>>im.size不等于指定值……由于采用了按比例缩放的方式进行处理
(100,75)
完整源码可在公众号:「01二进制」后台回复:「海报生成器」获取
“要做一个会偷懒的coder👇”

