完整源码可在公众号:「01二进制」后台回复:「海报生成器」获取

最近自闭了一段时间,仔细思考一番后还是决定要把自己心中所想坚持下去。今天来分享一个日常生活中经常见到,但是制作起来又可能会一时没有思路的东西,主要功能就是生成带二维码的卡片或者海报。

之前莫名其妙的被导师安排负责管理实验室的头条号,任务不难,就是接收实验室学长学姐翻译转述的论文,然后再发布到今日头条的头条号上,最后再生成如下所示的宣传图即可:

当时觉得,不就是发发文章,然后再用ps做个图这么简单吗。可接手之后才发现我毕竟图样图森破啊,从去年11月我开始发文章到今天,期间从未有一天断过,但是这头条号的编辑器也从未更新过,一个这么大的自媒体企业,文章的编辑器竟然烂的跟坨?一样,不支持外部图片,不支持markdown,不支持数学公式,不支持多级标题。(别跟我说什么可以把markdown转成html然后再复制进头条号的编辑器里面,样式都变成鬼了)

扯远了扯远了,回到正题。之前这么多天实现上述需要的主要流程如下:

  1. (采取各种方式优化排版)把文章发布到(不支持各种常用功能的)头条号上
  2. 文章发布后,获取其文章链接,并到草料二维码生成器网站,上传实验室logo后生成二维码下载至本地
  3. 利用PhotoShop将封面图、文章标题和文章二维码合成在一起后发给老师。

在经历了100天上述这样重复的操作之后,我厌烦了。难道就没有一个工具可以让我只输入文章链接和标题就自动生成海报的吗?

苦苦寻觅半天无果,也罢,有条件要上,没条件创造条件也要上。没有现成的轮子,那就只能自己打造一个了,Python无疑是开发这个小工具的首选。

一般用于推广的海报或卡片样式都差不多,需要改变的主要就是二维码,所以只需要准备好海报的背景图,然后根据用户提供的二维码,将其贴在海报指定的位置上即可。

此次实验的项目结构如下:

assets文件夹中包含一些资源文件,例如msyhl.ttc(字体文件)template.jpg(背景模版图片)。output是生成的海报存放的路径

生成带logo的二维码

本次生成二维码依赖于 PIL 模块qrcode 库,官方地址为:https://pypi.org/project/qrcode/5.1/,这里不解释用法,感兴趣的自己去官方文档下了解。这里就直接上代码了,具体代码的用意详见注释:

# 生成一个带logo的二维码
def generateQRCode(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")# 读取logoicon = Image.open("assets/logo.jpg")# 设置logoimg_w, img_h = img.sizefactor = 4size_w = int(img_w / factor)size_h = int(img_h / factor)icon_w, icon_h = icon.sizeif icon_w > size_w:icon_w = size_wif icon_h > size_h:icon_h = size_hicon = 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

其实仔细阅读过这段代码之后才觉得整体的思路一目了然:先读取需要的素材文件(二维码、标题),然后将素材粘贴到背景图片的指定位置。唯一复杂点的就是要找到一个合适的粘贴点,这个没办法,只能自己去试。

完整源码可在公众号:「01二进制」后台回复:「海报生成器」获取

Tips

这里有点我要提下,就是利用PIL更改图片大小那块,也就是postPic.thumbnail((width/1.5, height/1.5))这个地方,其实PIL中还有一个方法叫做resize也是用来更改图片的大小的,那两者有何区别呢?

使用PIL生成缩略图用两种方式,resizethumbnail,区别在于使用reszie会返回一个新对象, 而使用thumbnail则会在原对象上进行修改,即thumbnail会覆盖原图。

>>> from PIL import Image
>>> im = Image.open('a.jpg')
>>> im.size   # 原图尺寸
(3264, 2448)
>>> id(im)
140253860921640
>>> resize_im = im.resize((100,100))
>>> resize_im
<PIL.Image.Image image mode=RGB size=100x100 at 0x7F8F65A0A518>
>>> id(resize_im)
140253862077720
>>> thumb_im = im.thumbnail((100, 100))
>>> thumb_im
>>> im.size   # 使用thumbnail后的原图尺寸改变,resize后的结果不一定等于指定的尺寸,因为是按比例缩放的
(100, 75)
复制代码

ISE头条号海报生成器相关推荐

  1. 推荐一个基于 Python + Vue 的海报生成器

    推荐一个基于 Vue.js 的海报生成器开源项目,像海报编辑器此类的低代码平台更多的开发量在前端,所以说这是前端工程师不错的练手项目,实现起来比管理系统有趣多了. 01.  海报生成器 前几天也推荐过 ...

  2. 拿来就用的Java海报生成器ImageCombiner(一)

    背景 如果您是UI美工大师或者PS大牛,那本文一定不适合你:如果当您需要自己做一张海报时,可以立马有小伙伴帮您实现,那本文大概率也不适合你.但是,如果你跟我一样,遇上到以下场景,最近公司上了不少传播方 ...

  3. 营销号视频生成器(Python)

    网上最近很火的段子是各种营销号的文案,比方说下面的段子 核桃核不能吞下去是怎么回事呢?核桃核相信大家都很熟悉,但是核桃核不能吞下去是怎么回事呢,下面就让小编带大家一起了解吧.核桃核不能吞下去,其实就是 ...

  4. python 今日头条 微头条_头条号运营技巧:如何玩转微头条?

    今日头条依靠智能推荐独步天下,被BAT纷纷效仿.可是今日头条还不满足,久不久就放大招,"私信"功能被指拳打微信,"微头条"被指脚踢微博. 微头条是什么玩意呢? ...

  5. 「AI」我喜欢的几个人工智能方面的头条号

    「AI」我喜欢的几个人工智能方面的头条号 笔者对于人工智能领域比较感兴趣,因它是代表世界高科技未来发展方向,是第四次工业革命的核心技术领域. 世界各国政府都对人工智能行业高度重视,各大国都制定了比较前 ...

  6. AI领域我重点关注的几个今日头条号

    AI领域我重点关注的几个今日头条号 有三AI https://www.toutiao.com/c/user/77063001544/#mid=1585011497933837 36氪 https:// ...

  7. 【今日头条】头条号图文发布页面的“扩展链接”是干嘛用的?

    这玩意不知道是干嘛用的? 是用于引流到外部网站用的 头条号创作者可在图文或视频详情页的固定位置插入外部链接,将用户引流至帐号主页.其他文章/视频页面.企业官方网站.店铺.活动 H5 等地址. 参考文章 ...

  8. markdown 字体颜色_一文搞定Markdown编辑头条号方法

    Markdown风格 发布自媒体文章时虽然内容非常重要,但是排版更加重要.因为没有外在美,如何让人花时间和精力去了解你的内在美呢. 最早由于公众号的流行,但它自带的编辑器却非常low(注: 现在已经好 ...

  9. 头条号为什么把作者抛弃了?

    <今日头条的流量哪里去了?>,在这篇文章中提到了一个关于头条号作者流量下滑的趋势.在头条横向扩张,将有限的流量分配给问答.微头条.短视频.火山小视频这些内容时,图文的流量出现了不可避免的下 ...

最新文章

  1. 3dmax图像采样器抗锯齿_内幕揭秘!同样的场景同一张图,用3DMAX网渲平台进行二次渲染时间竟然相差3个小时之多!...
  2. python os模块下载_Python OS模块目录文件处理
  3. ansible callbacks
  4. FSK软件鉴频,输出串行基带数据信号
  5. mybatis接口动态代理原理
  6. 火狐修复神秘的严重漏洞,同时影响Chrome 浏览器
  7. ruby设计模式之观察者模式2————更加一般化的观察者模式
  8. java 数字 无法表示_Java中基本数据类型、不能用浮点数表示金额
  9. 网页鼠标指针样式(cursor属性)
  10. 四大行业晋身今秋求贤大户 游戏人才缺口奇大
  11. java 校验银行卡号_Java之——基于Luhn算法的银行卡卡号的格式校验
  12. 教你如何利用python调用摄像头
  13. SAP FICO全解析之-货币换算比率
  14. gcc编译-m32、-mx32有什么区别
  15. t430服务器安装系统,Dell PowerEdge T430
  16. The Road Not Taken(未选择的路)
  17. MySQL数据库————MVCC
  18. Maven中不能引入ojdbc解决方法:com.oracle:ojdbc6:jar:11.2.0.3
  19. 国际快递顺丰API接口接入教程代码示例
  20. 房间脉冲响应测量与模拟方法

热门文章

  1. Wi-Fi 标准的演进:802.11a b g n ac ax
  2. 极客时间专栏:透视HTTP
  3. iOS内购遇到刷单问题
  4. 公共号码池redis实现方案
  5. 达摩院视觉AI训练营-搭建身份证识别系统-学习笔记
  6. 基于蛇优化算法的函数寻优算法
  7. 【算法讲4:乘性函数(上)】欧拉函数 | 因子和函数 | 因子个数函数
  8. 开发框架的使用和推广PPT模板
  9. 关于android手机应用创意
  10. 百度新闻首页和百度站长平台首页相继改版