韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > Python基础教程 > Python的文字特效,炫酷了!

Python的文字特效,炫酷了!

头像

 Ly

2020-06-23 17:02:285130浏览 · 0收藏 · 0评论

先上两张效果图

20200605060828872.gif

20200605060911444.gif

基本结构

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

每个字的运动可以分成三个部分,字体大小的变化、文字位置的变化、文字颜色(透明度)的变化。

# 把每个文字与它的三个运动结合为一个基本单位
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< offset:
            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< offset:
            return toSize* 8
        if time> offset+ dur:
            return toSize
        return toSize*8 - round((time-offset)/dur* toSize*7.5)
    def posFunc(time):
        if time< offset:
            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< offset:
            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< offset:
            return toSize
        if time> offset+ dur:
            return toSize
        return toSize
    def posFunc(time):
        if time< offset:
            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视频教程!!

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

空姐4免费高清完整版观看| 暗黑吃瓜网官网CGW.73| 《一滴都不许漏》何泽城林荫| 妈妈的绣感1| 小辣椒3美国伦理| 村长撕开乳罩吸奶头在线观看| 《共享弟夫》动漫在线观看免费 | 按摩师把我添高潮了6次 | 美女和男生一起努力的生孩子视频.| 女性开过苞后最明显的变化| 美女和男生一起努力的生孩子视频..| 嫂嫂宝库免费观看电视剧全部| 45岁老阿姨喷了三次尿素乳育 | 120分钟做爰A片免费| 日韩电影在线观看高清版电视剧| 老赵玩小静揉捏胸奶头视频播放| 打性奴屁股穿开裆裤调教| 丁香花影院免费观看电视剧哈尔滨 | 人口兽猪马狗第1集| 九九在线观看免费播放大全电视剧 | 《交换做爰》在线观看| 《熟妇的荡欲》免费看| 做爰高潮A片(毛片)| 《巨大萌蒂》免费| 女性扒开大腿内侧小肚子痒| 拔小萝卜免费观看全集电视剧| 坐在教授的根茎上写句子漫画图片 | 空姐4免费高清完整版观看| 无码欧XXXXX在线观看免费| 朋友的母亲中字ID| 我被5个男人躁一夜不收我怎么办 女生干多了腿中间会变宽吗 | 白丝袜精华液抹在脚上的功效| 国产免费观看高清电视剧 | 《不再是朋友的夜晚第二季》| 乡村玉米地周婶的小说叫什么名字| 性做爰全过程免费看| 传奇大掌柜电视剧全集免费播放| 我的妈妈正在厨房里做饭英语| 日本大片又大又好看的PPT| 坤坤寒入桃子里电视剧免费看| 《女教师的味道3》在线观看