最近在朋友圈看到个好玩的抽奖九宫格:

随便点开一个:

哈哈,笑出猪叫!这个玩法利用了朋友圈发长图会显示中间局部的设定,搞笑之余也为朋友圈广告营销贡献了新思路。

制作图的过程也不复杂,长图对应部分设计好,最后整合到一起就 OK 了,就是一张张地重复操作略显麻烦。想到这,不禁嘴角一翘、微微一笑,用 Python 的 PIL 模块来批量生成九宫格图片,不就好了?

设计思路

以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽“哈哈哈”。

Python 图像处理实现此思路,就是在对应尺寸的底图上,找到元素对应的位置坐标,通过 PIL 模块贴上预备好的表情图,并在图片中添加对应的广告语文本。图中心的数字编号我选择通过添加文本来实现,至于最下方的“哈哈哈”我是自制了一个七彩“哈哈哈”图片直接贴图

准备素材

首先在网上准备9个不同的表情包图片:

以及七彩“哈哈哈”嘲讽图:

九句不同的广告语参考文章开头朋友圈图片,我们通过 Python 字典将表情图和广告语对应到不同的九宫格图片:

content={"back_img":"paper.jpg","001":{"ad":'老板,买10盒月饼呗',"head":'001.jpg'},"002": {"ad": '老板,买20盒月饼呗',"head": '002.jpg'},"003": {"ad": '老板,生活不易,买50盒月饼呗',"head": '003.jpg'},"004": {"ad": '老板,买个80盒月饼,不多',"head": '004.jpg'},"005": {"ad": '老板,看面相,你应该买100盒月饼',"head": '005.jpg'},"006": {"ad": '老板,恭喜你中奖了,奖品是150盒月饼',"head": '006.jpg'},"007": {"ad": '老板,你的员工让我告诉你,他们想吃月饼了',"head": '007.jpg'},"008": {"ad": '老板,我卖月饼,买200盒呗',"head": '008.jpg'},"009": {"ad": '老板,不整500盒月饼送礼啊',"head": '009.jpg'}}

PIL 图片处理

PIL: Python Imaging Library, 是功能强大 Python 图像处理库。Python 3 中通过 pip install Pillow 安装,代码文件开头通过 import PIL 来导入。此处我们要用到 PIL 中贴图和向图片中写入文字。

贴图通过 Image 模块来实现,通过 Image.open()打开图片,需要的话可以进行 resize() 缩放等处理,最终通过 paste()在给定的坐标处贴图

from PIL import Image# im 是背景图im = Image.open(background)# head_img 是要贴的表情图,先缩放统一尺寸head_img = Image.open(f"head/{head}").resize((150,150),Image.ANTIALIAS)# 在背景图的 75,200 坐标处贴s上表情图im.paste(head_img,(75,20))

向图片中写入文字时通过 ImageDraw 模块来实现,如果要对文字尺寸和字体做调整,需要导入 ttf 字体文件,要注意的是有些字体不支持中文。最终通过 PIL.ImageDraw.ImageDraw.text() 将文本写入图中指定位置。

from PIL import Image, ImageFont, ImageDrawim = Image.open(background)draw = ImageDraw.Draw(im)mark_font = ImageFont.truetype("pre/arial.ttf",100)draw.text((125,400),mark,font=mark_font,fill=(0,0,0))

细节处理

制作九宫格图片过程中,由于内容简单,对应好元素位置直接操作就好。唯一不可控的是广告语长度和内容,这里我们处理得较简单,识别广告语中的中文“,”来断句,每个被断开的短句占一行居中显示在图片中。

既然我们是要用代码来批量生产图片,每个图片目前可变的是表情图和广告语,代码中我们就把完整生成一张图的过程封装成函数,这样每次给定相应参数调用该函数,即可批量生成我们需要的九宫格抽奖长图了。

# 提前定义好生成长图的函数 get_pic(background,head,adcontent,mark,pic_name)for i in range(1,10):background = "pre/paper.jpg"head = content[f'00{i}']['head']adcontent = content[f'00{i}']['ad']get_pic(background,head,adcontent,f"{i}",f"{i}.jpg")print("九宫格图片生成完毕!")

代码下载

GitHub 代码及素材下载链接:https://github.com/pengfexue2/friends_ad.git百度网盘代码及素材下载:https://pan.baidu.com/s/10qqahokqPoc1KFJ7PyARxg  密码:h102

最终效果

点开之后是如下长图:

后续更新

目前准备的表情图和嘲讽图有限,后续可能会丰富下素材内容。顺便给周末立个 flag,有时间且进展顺利的话,把代码对应的可执行程序 exe 发出来。

至于不会跑 Python 代码的朋友,目前可以私信我不同的广告语,我直接发给你定制生成的图,个人微信见公众号右下角。

如果喜欢,不妨点个在看,感谢!

python微信朋友圈刷图_10分钟用Python做个微信朋友圈抽奖九宫格相关推荐

  1. python 30分钟_一张图30分钟快速Python入门

    国外一个大牛使用一张图来讲述Python的基本概念,让你30分钟快速入门.通过该程序,可以了解快速Python语言基本的语法结构和使用方法,它的基本程序如下: 当然看不懂没关系这里还有中文版的 # - ...

  2. python random模块中的指令_10分钟让你掌握python编程中random模块功能使用,非常详细...

    原标题:10分钟让你掌握python编程中random模块功能使用,非常详细 python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可 ...

  3. 用python编写阴阳师自动刷图脚本

    import pyautogui as sb #鼠标 import random import time# random.uniform 随机小数 def move(s,inta,intb,intc, ...

  4. bs4爬取的时候有两个标签相同_10分钟用Python爬取最近很火的复联4影评

    <复仇者联盟4:终局之战>已经上映快三个星期了,全球票房破24亿美元,国内票房破40亿人民币. 虽然现在热度逐渐下降,但是我们还是恬不知耻地来蹭一蹭热度.上映伊始<复联4>的豆 ...

  5. python分类预测降低准确率_十分钟掌握python机器学习特征选择

    十分钟掌握python机器学习特征选择-1.jpg (33.2 KB, 下载次数: 0) 2018-6-26 23:01 上传 在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最 ...

  6. Python Train_出乎意料的简单!10分钟用python建立人工智能预测模型

    介绍 鉴于Python在过去几年中的兴起及其简洁性,对于数据科学领域的Python学家意义重大.这篇文章会用最容易的方式引导你更快地构建第一个预测模型. 出乎意料的简单!10分钟用python进行人工 ...

  7. python slice函数画高维图_没想到Python还能画六维图

    我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面. 来自维基百科 不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 p ...

  8. 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。

    文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...

  9. python微信朋友圈刷图_用python中的itchat可视化微信朋友圈

    itchat是python与微信网页版连接的api,作为测试,博主利用itchat爬取了自己的微信并进行可视化 首先登录微信,定义函数用来储存好友信息 import itchat import mat ...

最新文章

  1. php获取搜索框的函数,php获取搜索引擎入站关键词的函数
  2. Apache端口设置多域名和转发请求(虚拟域名)
  3. 如何搭建一个 MySQL 分布式集群
  4. 您必须有下列压缩分卷才能继续解压
  5. Android activity-alias 的使用
  6. Linux常用命令--文件(夹)查找之find命令
  7. 执行git命令时提示秘钥权限太开放‘Permissions 0644 for ‘/Users/liuml/.ssh/id_rsa_tz‘ are too open.’
  8. C#学习常用方法(3000)---Foreach ,in
  9. Codeforces D546:Soldier and Number Game
  10. C/C++回调方式系列之一 函数指针和函数回调模式
  11. 【学习强化学习】三、Q learning和Sarsa算法
  12. C语言:数组数据移动
  13. 优动漫PAINT的界面如何适配数位屏/平板?
  14. DRM驱动(五)之drm_atomic_state
  15. PYTHON使用chinese_calendar判断日期是否为节假日
  16. 一文了解SAP IBP是什么?
  17. 腾讯财报:2018年Q3腾讯净利润197.1亿元 同比增长15%
  18. A_A02_004 J-LINK驱动安装
  19. Java布局管理器实现关掉,Java布局管理器使用方法探讨
  20. 背包问题(Knapsack Problem)

热门文章

  1. linux中useradd命令的使用详解
  2. XTransfer技术专家康康:从普通程序员到架构师的进化之路
  3. U盘安装Ubuntu——关于UltraISO打开Ubuntu只有EFI文件夹的解决方法
  4. 为什么高质量计算机书籍几乎都是外国人写的?
  5. 如何1年赚100万,具体点
  6. 《AR与VR开发实战》——第1章AR技术简介
  7. JAVA服务器端发送邮件问题:Could not connect to SMTP host: smtp.qq.com, port: 465
  8. 5 kyu some egyptian fractions
  9. spark配置elasticsearch属性汇总(基于es7)
  10. 9 迭代器与组合模式