社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python做一个好玩的朋友圈九宫格抽奖

菜鸟学Python • 4 年前 • 296 次点击  

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


随便点开一个:


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


制作图的过程也不复杂,长图对应部分设计好,最后整合到一起就 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("九宫格图片生成完毕!")



最终效果



点开之后是如下长图:



近期热门:

千人Python知识星球重大福利,一年仅一次


学习群:

小密圈人气很高的两个实战项目

小密圈的趣味实战-微信主题

3个月还没入门Python,看这100名小密圈的同学3周学Python的杰作



需要源码和素材的同学,后台输入:【九宫格】



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39401
 
296 次点击