總結文字特效的特點是,每個文字獨立運動,都符合同一個運動規律,但每個文字之間保持一個固定的時間差。每個字的運動可以分成三個部分,字型大小的變化、文字位置的變化、文字顏色(透明度)的變化。
# 把每個文字與它的三個運動結合為一個基本單位
def newTextMotion(char, posFunc, sizeFunc, colorFunc):
tm={}
tm["char"]=char
tm["posFunc"]= posFunc
tm["sizeFunc"]= sizeFunc
tm["colorFunc"]= colorFunc
return tm
1
2
3
4
5
6
7
8
文字動效的展示
在任意一個時間點上,獲得文字的顯示效果。
# 在指定的時間,計算文字的位置、大小、顏色等
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)
9
10
11
12
針對一組文字,形成一個列表,獲取起每個時間點的顯示圖,作為一幀
def getTextFrame(tmList, time):
textImg= Image.new("RGBA", (1280, 720))
for tm in tmList:
showText(textImg, tm, time)
return textImg
總結文字特效的特點是,每個文字獨立運動,都符合同一個運動規律,但每個文字之間保持一個固定的時間差。每個字的運動可以分成三個部分,字型大小的變化、文字位置的變化、文字顏色(透明度)的變化。
# 把每個文字與它的三個運動結合為一個基本單位
def newTextMotion(char, posFunc, sizeFunc, colorFunc):
tm={}
tm["char"]=char
tm["posFunc"]= posFunc
tm["sizeFunc"]= sizeFunc
tm["colorFunc"]= colorFunc
return tm
1
2
3
4
5
6
7
8
文字動效的展示
在任意一個時間點上,獲得文字的顯示效果。
# 在指定的時間,計算文字的位置、大小、顏色等
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)
1
2
3
4
5
6
7
8
9
10
11
12
針對一組文字,形成一個列表,獲取起每個時間點的顯示圖,作為一幀
def getTextFrame(tmList, time):
textImg= Image.new("RGBA", (1280, 720))
for tm in tmList:
showText(textImg, tm, time)
return textImg