python if实现对话_Python生成微信对话生成器(四)
接上篇,我们来完善另一重要部分,白底气泡图的生成。效果演示:
过程复盘:根据复用原则,我们希望做成通用的代码,这就需要对前面的代码进行简单的改造。改造1:把所有气泡生成位置的参照物,改为leftStart。根据对称原理:白底气泡图的起始位置就应该是1080-919,因为绿底的离右边缘是这么远。if who=="Me":leftStart=919-cenLen-2*welse:leftStart=1080-919完成以上这步,所有原代码中涉及919来参照边界的,统统改为leftStart加距离来实现,以实现代码的通用性。毕竟除了三角,定好左边界和上边界,这个气泡就可以完整的画出来。例如:top=Image.open(picDir "上填充.png")#上中top=top.resize((cenLen,h))bg.paste(top,(leftStart w,tp,leftStart w cenLen,tp h))
leftStart w cenLen是气泡上面中间的填充部分,我们弃用919-w。
改造2:气泡背景的三角部分,做一个分支判断,分别加载。arr=Image.open(picDir "箭头.png").convert("RGBA")r,g,b,a =arr.split()if who=="Me":bg.paste(arr,(919,tp h,919 13,tp h 26),mask=a)bg.save("bgEnd.png")else:arrL=arr.transpose(Image.FLIP_LEFT_RIGHT)r,g,b,a =arrL.split()bg.paste(arrL,(leftStart-13,tp h,leftStart,tp h 26),mask=a)
改造3:绿图素材PS一份完全一样的白图素材,按需调用。如图,src目录下的M放绿图素材,U目录放白图素材。
改造4:将头像生成代码,精简成函数,头像与模板图放入tx目录。改造的核心就是,按需加载合适的头像,按传入高度写入背景。
from PIL import Image
def makeHead(srcImg):
tx = Image.open(srcImg).resize((103,103)).convert("RGBA")
mb = Image.open(src/tx/mb.png)
mb.paste(tx, mask=mb)
return mb
def drawHead(bgImg,startTop,who):
bg=Image.open(bgImg)
if who=="Me":
startLeft=946
srcImg="src/tx/M.jpg"
else:
startLeft=26
srcImg="src/tx/U.jpg"
rd=makeHead(srcImg).convert("RGBA")
r,g,b,a = rd.split()
bg.paste(rd,(startLeft,startTop,startLeft 103,startTop 103),mask=a)
bg.save("bgEnd.png")你会发现,在位置方面,我们也是考虑了两个头像左右对称。改造5:适当的调整字间距、文字对应图片宽度等参数,使比例合适。间距改为4,文字背景图宽改为40,文字上偏移改为8。最终的txtDialog.py是这样的:from PIL import Image,ImageDraw,ImageFont
from wxtx import drawHead
def drawText(txtPic,words,x,y):
img=Image.open(txtPic)
draw=ImageDraw.Draw(img)
fontType = /System/Library/Fonts/msyh.ttc#调用系统微软雅黑字体
font = ImageFont.truetype(fontType,40)#创建字体对象
i=0
for w in words:
if i<16:
draw.text((x 40*i i*4,y-8),w, (0,0,0,255), font)
else:
draw.text((x 40*(i%16) (i%16*4),y i//16*40 22*(i//16)-8),w, (0,0,0,255), font)
i =1
img.save("bgEnd.png")
def createBubble(bdPic,str,tp,who):
picDir="src/M/"
if who=="U":
picDir="src/U/"
n=len(str)
if n<16:
cenLen=n*40 (n-1)*4
else:
cenLen=16*40 (16-1)*4
lines=n//16 1#最多16个字一行
bdr=919
img=Image.open(picDir "拐角.png").convert("RGBA")
w,h=img.size
bg=Image.open(bdPic)
r,g,b,a =img.split()
if who=="Me":
leftStart=919-cenLen-2*w
else:
leftStart=1080-919
bg.paste(img,(leftStart,tp,leftStart w,tp h),mask=a)#左上
top=Image.open(picDir "上填充.png")#上中
top=top.resize((cenLen,h))
bg.paste(top,(leftStart w,tp,leftStart w cenLen,tp h))
rt = img.transpose(Image.FLIP_LEFT_RIGHT)#右上
r,g,b,a =rt.split()
bg.paste(rt,(leftStart w cenLen,tp,leftStart w cenLen w,tp h),mask=a)
lr=Image.open(picDir "左右填充.png")#中间部分
lr=lr.resize((cenLen 2*w,42*lines (lines-1)*22))
bg.paste(lr,(leftStart,tp h,leftStart w cenLen w,tp h 42*lines (lines-1)*22))
rt = img.transpose(Image.FLIP_TOP_BOTTOM)#左下
r,g,b,a =rt.split()
bg.paste(rt,(leftStart,tp h 40*lines (lines-1)*22,leftStart w,tp h 40*lines (lines-1)*22 h),mask=a)
bg.paste(top,(leftStart w,tp h 40*lines (lines-1)*22,leftStart w cenLen,tp h 40*lines (lines-1)*22 h))#下中
rt = img.transpose(Image.FLIP_LEFT_RIGHT)#右下
rt=rt.transpose(Image.FLIP_TOP_BOTTOM)
r,g,b,a =rt.split()
bg.paste(rt,(leftStart w cenLen,tp h 40*lines (lines-1)*22,leftStart w cenLen w,tp h 40*lines (lines-1)*22 h),mask=a)
arr=Image.open(picDir "箭头.png").convert("RGBA")
r,g,b,a =arr.split()
if who=="Me":
bg.paste(arr,(919,tp h,919 13,tp h 26),mask=a)
bg.save("bgEnd.png")
else:
arrL=arr.transpose(Image.FLIP_LEFT_RIGHT)
r,g,b,a =arrL.split()
bg.paste(arrL,(leftStart-13,tp h,leftStart,tp h 26),mask=a)
bg.save("bgEnd.png")
return (leftStart,tp h 42*lines (lines-1)*22 h)
def Chat(ImgPath,text,startHeiht,who):
ls=createBubble(ImgPath,text,startHeiht,who)
drawHead("bgEnd.png",startHeiht,who)
drawText("bgEnd.png",text,ls[0] 24,startHeiht 32)
return ls[1]
【注意】
return (leftStart,tp h 42*lines (lines-1)*22 h)函数的返回值是个元组,主要我要用到俩值,第一个是气泡画好了,左边距在哪,方便写字的时候确定起点;第二个是气泡画好了,下部边缘到哪了。这样下一个人的回话位置就可以确定了。
这样,就可以开始文字“聊天”了。from txtDialog import Chat
ch=Chat("bgSrc.png","马总,在吗,我是小潘",342,"Me")
ch=Chat("bgEnd.png","有点小事麻烦一下你",ch 32,"Me")
ch=Chat("bgEnd.png","有事说一声就行",ch 32,"U")
ch=Chat("bgEnd.png","都是老朋友了,能办的我一定办",ch 32,"U")
ch=Chat("bgEnd.png","我最近缺钱花了,能不能刷点花呗借呗,你给我设置个免还?",ch 32,"Me")
ch=Chat("bgEnd.png","就这事?",ch 32,"U")
ch=Chat("bgEnd.png","已经搞定,下次留言说一下就好,都是小事!",ch 32,"U")
ch=Chat("bgEnd.png","好的,谢谢",ch 32,"Me")
ch=Chat("bgEnd.png","下次直接留言!",ch 32,"Me")
准备初始图片(人名暂时是PS上的):
运行代码后:
至此,我们的目标已经基本实现了。整理一下本部分的知识点:用好函数的返回值,如果要返回多个值,可以用元组拼成一个。
左右两侧的聊天虽不同,找到共性leftStart,可以写成通用代码。
利用参数进行分支判断,做不同的处理过程。如气泡背景加载处理。
做好代码文件和图片资源的合理划分,规划好存放目录。
下期预告《收尾工作:添加更多可变参数,优化功能》
如果你觉得有用,可以点个在看↓
python if实现对话_Python生成微信对话生成器(四)相关推荐
- 【实测有效】一键生成微信对话视频,微信聊天记录生成器,
微信对话视频生成器是一款非常实用的工具,它可以将平常的微信聊天记录转化为精彩纷呈的对话视频,让你的聊天更有趣.更生动!现在,无需任何专业技能,只需几步操作,你就可以快速生成属于自己的微信对话视频. 使 ...
- python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)
引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这里作了模糊处理. 是不是很炫,而且这还是独一无二的,毕竟 ...
- python朋友圈教程_Python 生成你的朋友圈九宫格图片
关于微信之前写过以下文章,有兴趣可以点击查看: 如何导出你的微信语音 c 盘空间又满了?微信清理神器帮你释放空间 微信撤回的消息也能看到! 如何备份可能被删的公众号文章和网页 如何在电脑上登陆多个微信 ...
- python分配红包程序_Python版微信红包分配算法
Python版微信红包分配算法 发布于 2015-05-08 10:54:23 | 151 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对象.解释型计算机 ...
- python设定数值范围_Python 生成周期性波动的数据 可指定数值范围
代码 import numpy as np import math import matplotlib.pyplot as plt #python在指定的时间段生成周期性波动的数据: #周期性 lon ...
- c语言 余额 自动生成,微信余额生成器
安卓微信余额生成器是一款一键生成微信余额的软件,能自由修改微信余额显示,当然只能生成截图,可以发到朋友圈用.恶搞朋友什么的棒棒哒,一键截图发送给好友,微信余额生成器2018可以让变的更加简单,感兴趣的 ...
- python 打卡程序_python获取微信企业号打卡数据并生成windows计划任务
由于公司的系统用的是Java版本,开通了企业号打卡之后又没有预算让供应商做数据对接,所以只能自己捣鼓这个,以下是个人设置的一些内容,仅供大家参考 安装python python的安装,这里就不详细写了 ...
- 【剪辑必备】情感对话号必备-微信对话生成脚本,一键生成视频【安卓永久版脚本】
微信模拟聊天软件,可以自行更改网名,改头像,聊天内容随意修改,下载即可使用!没有试用教程,用法非常简单 设备需求:安卓系统 教程+工具请到CSDN下载https://download.csdn.net ...
- python朋友圈头像_Python读取微信好友头像,拼成祝福语九宫格
今天有位老哥过生日,结合着微信头像和点阵字,搞了个头像拼字的代码,朋友圈九宫格效果如下: 其中,每个字都是16*16的点阵,点阵中每个点可以拆解为4个好友头像图片: 代码中汉字文本可以自定义输入,头像 ...
- python编写性别比例_Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】...
本文实例讲述了Python分析微信好友性别比例和省份城市分布比例的方法.分享给大家供大家参考,具体如下: 安装itchat pip install itchat 使用 新建wxfx.py,拷贝以下代码 ...
最新文章
- mysql存储过程结构体_八、mysql视图、存储过程、函数以及时间调度器
- Java中六大时间类的使用和区别
- 性能之巅:Linux网络性能分析工具-netstat,ifconfig,nicstat,traceroute,tcpdump
- 计算机四级考试题数据库,计算机四级考试《数据库系统工程师》试题及答案
- Mysql 中Sql控制流语句_DCL语句/控制流语句
- 新浪uc2010免费下载
- Djaongo 中间件
- python下绘制折线图
- python中常见的运行时错误_新手常见Python运行时错误汇总
- (十一)C语言中内存堆和栈的区别
- Pytorch Tensor.unfold()的简单理解与用法
- 阀体端面钻6孔组合机床设计及夹具设计
- 光流在视频检测和分割的再应用
- 《软件工程之美》打卡第六周
- Linux虚拟机挂载新的硬盘
- win7开不了机按f8修复计算机没反应,win7开不了机按f8没用怎么办
- 使用itextpdf实现横板PDF文件与竖版PDF文件的相互转换
- 电子烟市场Juul来袭,锐刻福禄们该如何做防?
- 微星B550M MORTAR WIFI 的蓝牙模块消失的解决办法
- 好文转载—程序员的禅修之路
热门文章
- 作为一名基层管理者如何利用情商管理自己和团队(二)
- python实现最小二乘拟合函数(选择三种不同基函数,基函数可改变)
- Acunetix 网站漏洞扫描软件 检测您网站的安全性。
- BIOS和EFI启动过程
- linux硬盘的两个分区合并_linux新加硬盘合并
- 多网卡多网关设置错误:RTNETLINK answers: File exists
- [AHK]给PPT插入图片
- bufferedimage 保存图片_如何提取图片中的文字
- 一网打尽!炫酷枪火打击视频+图文+源码!哔哔哔......
- 上传本地网页到github网址完整详细步骤