10.19 成為表情包大帝,僅需幾十行python代碼,簡單易學

喜歡編程,熱愛分享,希望能結交更多志同道合的朋友,一起在學習Python的道路上走得更遠!有不懂的問題可以私聊我哦!

成為表情包大帝,僅需幾十行python代碼,簡單易學

gif動圖製作

python製作gif動圖可以用imageio庫簡單實現。做gif實際上就是變換連續幾張圖,以下是一個簡單的例子。

效果圖:

成為表情包大帝,僅需幾十行python代碼,簡單易學

具體的代碼實現:

import imageio
import glob
import cv2
from PIL import ImageFont, ImageDraw, Image
def create_gif(imagename_list, gif_name, duration=1):
"""生成gif動圖,
imagename_list:圖片名字列表;
git_name:生成的gif;
duration:間隔時間,單位秒。
"""
frames = []
size = Image.open(imagename_list[0]).size # 獲取第一張圖的size,後面的圖都resize到該size
\t# 製作圖片序列
for imagename in imagename_list:
image = Image.open(imagename)
image = image.resize(size, Image.ANTIALIAS)
frames.append(image)
# 生成gif,frames是圖片列表,duration是間隔時間
imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
print("gif圖製作完成")
# gif生成
filename_list = glob.glob(r'*.jpg')
create_gif(filename_list, "test.gif")

漸變的gif動圖製作

想要動圖看起來更加自然,效果更好的話,就需要在轉換圖片的時候添加一點簡便的感覺。

由上面gif製作可以知道,實際上是連續轉換圖片即可,所以可以先生成漸變的圖片,然後再將漸變的中間圖片插入到兩張圖中間即可。

效果展示圖:

成為表情包大帝,僅需幾十行python代碼,簡單易學

代碼實現:

import imageio
import glob
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
def read_images(image_name_list):
image_list = []
size = Image.open(image_name_list[0]).size
for image_name in image_name_list:
image = Image.open(image_name).resize(size, Image.ANTIALIAS)
# 轉為UMat,以使用addWeighted方法
image = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
image_list.append(image)

print("圖片讀取完成")
return image_list
def create_gif(image_list, gif_name, duration=2, k=9):
"""生成gif動圖,
image_list:圖片矩陣列表;
git_name:生成的gif;
duration:兩張影像之間的間隔時間,單位秒。
"""
frames = []

for index in range(len(image_list)-1):
buff = gif_gradually(image_list[index], image_list[index+1], k)
frames.extend(buff)

# 生成gif,frames是圖片列表,duration是間隔時間
imageio.mimsave(gif_name, frames, 'GIF', duration=duration/k)
print("gif圖製作完成")
def gif_gradually(img1, img2, k=10):
"""生成兩張影像之間的過度影像,漸變"""
buff = []
for i in range(k):
alpha = i*1/k
# 增加權重,顯示兩張圖片之間的過渡圖片
img = cv2.addWeighted(img1, alpha, img2, (1-alpha), gamma=0)
# 轉為PIL
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)
buff.append(img)
return buff
# gif生成
filename_list = glob.glob(r'*.jpg')
image_list = read_images(filename_list)
create_gif(image_list, "test.gif")

以上就是本文的所有內容,感興趣的朋友們不妨自己動手試試!

如果你想提升自己,對編程感興趣,小編這裡有

一整套python的學習資料從web開發、爬蟲、數據分析、數據可視化、機器學習、到面試真題,關注我並在後臺私信小編:“08”即可免費領取資料


分享到:


相關文章: