先上两张效果图

基本结构

总结文字特效的特点是,每个文字独立运动,都符合同一个运动规律,但每个文字之间保持一个固定的时间差。

每个字的运动可以分成三个部分,字体大小的变化、文字位置的变化、文字颜色(透明度)的变化。# 把每个文字与它的三个运动结合为一个基本单位

def newTextMotion(char, posFunc, sizeFunc, colorFunc):

tm={}

tm['char']=char

tm['posFunc']= posFunc

tm['sizeFunc']= sizeFunc

tm['colorFunc']= colorFunc

return tm

文字动效的展示

在任意一个时间点上,获得文字的显示效果。# 在指定的时间,计算文字的位置、大小、颜色等

def showText(img, textMotion, time):

char= textMotion['char']

pos= textMotion['posFunc'](time)

size= textMotion['sizeFunc'](time)

color= textMotion['colorFunc'](time)

font= ImageFont.truetype(fontName, size)

draw = ImageDraw.Draw(im=img)

textSize= draw.textsize(text=char, font=font)

tx= pos[0]- textSize[0]// 2

ty= pos[1]- textSize[1]// 2

draw.text(xy=(tx, ty), text=char, fill=color, font=font)

针对一组文字,形成一个列表,获取起每个时间点的显示图,作为一帧def getTextFrame(tmList, time):

textImg= Image.new('RGBA', (1280, 720))

for tm in tmList:

showText(textImg, tm, time)

return textImg

具体文字运动规律

下面看看这两种特效的具体运动规律。乍一看比较复杂,但拆分为三个运动后,其实每种都比较简单。以此为模块,读者可以自行制作更多的文字特效。# 文字缩小

def makeTextShrink(char, toSize, toPos, toColor, offset, dur):

def colorFunc(time):

if time

return (0,0,0,0)

if time> offset+ dur:

return toColor

return toColor[:-1] + (50+ round((time-offset)/dur*200),)

def sizeFunc(time):

if time

return toSize* 8

if time> offset+ dur:

return toSize

return toSize*8 - round((time-offset)/dur* toSize*7.5)

def posFunc(time):

if time

return (0,0)

if time> offset+ dur:

return toPos

# return (toPos[0], round((time-offset)/dur*toPos[1]))

return toPos

return newTextMotion(char, posFunc, sizeFunc, colorFunc)

# 抛物线降落(有一个回弹效果)

def makeTextParaDrop(char, toSize, toPos, toColor, offset, dur):

def colorFunc(time):

if time

return (0,0,0,0)

if time> offset+ dur:

return toColor

return toColor[:-1] + (50+ round((time-offset)/dur*200),)

def sizeFunc(time):

if time

return toSize

if time> offset+ dur:

return toSize

return toSize

def posFunc(time):

if time

return (toPos[0], 0)

if time> offset+ dur:

return toPos

r= 0.75

dur2= dur

a= toPos[1]/(dur2* dur2* (1- 2* r))

b= -2* a* dur2* r

x= (time-offset)

return (toPos[0], round(a* x* x+ b*x))

# print(toPos)

return newTextMotion(char, posFunc, sizeFunc, colorFunc)

整体设置与运行

对于一行文字,每个增加特效,并依次给予一个延时。# 一行文字,给定所有参数,配置运动函数与延时

def getMotionList(text, fontSize, fontColor, startPos, fromTime, dur, func):

tmList=[]

inter= round(dur/ len(text))

for i in range(len(text)):

char= text[i]

pos= (startPos[0]+ i* fontSize+ 10, startPos[1])

color= fontColor

# tm= makeTextDropMotion(char, fontSize, pos, color, 150*i)

tm= func(char, fontSize, pos, color, fromTime+inter*i, dur)

tmList.append(tm)

return tmList

这里,将不同的文字特效函数作为参数传入即可,有比较好的扩展性。

最后是一个展示函数,用了imageio来制作gif图。这里注意两个地方,第一是展示时间应当是单文字运动时间的两倍。为了确保动感,当第一个文字到位时,最后一个文字恰好启动,所以时间是两倍的关系。

第二是制作GIF的延时应当与计算用的延时一致,这里都是50毫秒(20fps)。def showTextDrop(text, startPos, func):

fontSize= 50

color=(255, 255,  0, 255)

tmList= getMotionList(text, fontSize, color, startPos, 0, 1000, func)

frames=[]

outfilename='temp.gif'

for i in range(0, 2000, 50):

print(i)

img= Image.new('RGB', (640, 360))

# img= Image.open('back.png').resize((640, 360), Image.ANTIALIAS)

# img = img.convert("RGB")

textImg= getTextFrame(tmList, i)

r, g, b, a= textImg.split()

img.paste(textImg, (0,0), mask= a)

str1= 'tempAA.png'

img.save(str1)

im = imageio.imread(str1)

frames.append(im)

imageio.mimsave(outfilename, frames, 'GIF', duration=0.05)

if __name__=='__main__':

# showTextDrop('淡妆浓抹总相宜', (150,200), makeTextParaDrop)

showTextDrop('淡妆浓抹总相宜', (150,200), makeTextDropMotion)

更多Python知识,请关注Python视频教程!!

python 特效字_Python的文字特效,炫酷了!相关推荐

  1. python设置字体_Python实现文字特效的方法

    Python实现文字特效的方法 发布时间:2020-06-24 10:00:12 来源:亿速云 阅读:171 作者:清晨 不懂Python实现文字特效的方法?其实想解决这个问题也不难,下面让小编带着大 ...

  2. H5炫酷特效系列2——canvas特效-炫酷的心

    之前已经有了一个满屏幕红心的案例,这次带来一个更加炫酷的心型炫酷动效,直接上图,有兴趣的就继续往下看,没兴趣直接过. 屏幕上眼花缭乱的心,不停的冲击着你的视线,让那些少女心砰砰直跳,绝对表白利器,同志 ...

  3. Photoshop文字特效——炫彩效果文字

    要制作一个炫彩效果的文字 1.  首先,我们要应用一个深色的背景,以衬托文字的色彩 2.  为文字执行模糊效果,使其产生朦胧的感觉 3.  对已模糊的图像进行"晶格化"设置,从而产 ...

  4. python三维图形渲染 地图_原来炫酷的可视化地图,用Python就能搞定!

    对于可视化地图,Pyecharts是小F以前用的最多的. 还有应该就是一些网站了,现成的工具,不需要敲代码. 在5G手机可视化那一篇文章,也是用Pyecharts做的地图- 而对于Matplotlib ...

  5. 不到 100 行 Python 代码教你做出精美炫酷的可视化大屏

    作者 |俊欣 来源 |关于数据分析与可视化 "碳达峰.碳中和"是2021年政府在不断强调与非常重视的事儿,那什么是"碳达峰".什么又是"碳中和&quo ...

  6. CSS实现文字动画炫酷效果

    span{//设置文字动画背景动图background:url(https://www.17sucai.com/preview/776331/2019-07-28/asw/img/giphy.gif) ...

  7. python老司机带你玩玩炫酷的3D渲染,酷毙了!

    自从学会了turtle模块后,画了不少简笔画.像小猪佩奇.哆啦A梦等等,但是这些依然不能让身边人感受到python的强大,依然是每次装逼必被打脸.就像你用turtle画了这个 别人拿出了这个 怎么办? ...

  8. 【Python实战】海量表情包炫酷来袭,快来pick斗图新姿势吧~(超好玩儿)

    前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材+源码都在

  9. 用html写的生日祝福特效,炫酷的生日祝福特效

    HtmlCssJs Please click ? @import url(https://fonts.googleapis.com/css?family=Raleway:400,500,300,600 ...

最新文章

  1. android onCreate的两个方法
  2. 【Flutter】Dart 数据类型 ( dynamic 数据类型 )
  3. 雷军卸任小米电子董事长!常程等人也退出该公司 网友:为造车放弃家业?
  4. php v命令找不到,-bash: php: command not found 命令找不到
  5. 非oracle用户使用expdp,expdp 和impdp使用之一(不同用户和不用表空间)
  6. 内容页嵌套母版页时,内容页如何调用css和javascript
  7. 【排序】剑指offer:数组中重复的数字
  8. HP 招聘性能测试PM 北京/上海 长期招聘
  9. 【GitHub Desktop】(GitHub Windows桌面版) 中文汉化,(GitHub客户端汉化,非网页端插件)
  10. 【HTML】HTML浏览器打印自定义页眉页脚
  11. 避坑11_VScode在vue文件内template无法使用tab补齐标签
  12. 模拟新浪微博用户注册
  13. asp excel导入mysql_asp excel导入数据库
  14. 如何在Flatter中以正确的方式存储登录凭证
  15. 辐角原理判断点和多边形的关系
  16. 计算机派位志愿填报技巧,小升初电脑大派位:大派位操作流程及志愿填报
  17. 耳机串音问题解决(crosstalk)
  18. 海南省计算机作品大赛,海南省教育研究培训院:关于举办第二十届海南省中小学电脑制作活动的通知...
  19. 备份Linux系统(通用)
  20. Hackme Writeup

热门文章

  1. UNIX下执行文件的减肥工具strip[转载]
  2. 国产 CAN 协议高速收发控制器DP1050 替代TJA1050
  3. SpringBoot加载spring.factories的价值
  4. XNA实现3D连连看
  5. mysql 1305 报错_MySQL错误...#1305
  6. C++中调用matplotlibcpp.h画图
  7. DDOS流量清洗,全面防御DDoS攻击
  8. 曲曲直直线条图计算机教案,三年级上册信息技术教案-10曲曲直直线条画 金色的秋天 |人教版(2015).doc...
  9. 常见外贸英文缩写(下)
  10. 寿险保单在线OCR识别,测试效果杠杠的,支持导出结果