見出し画像

アニメーションGIFをつくる

Pythonのライブラリには複数の画像を連結し、アニメーションGIFをつくるものがある。使いようによっては、下記のように手順書のアニメーションをつくることもできる。

アニメーションGIFの例

画像3

プログラムは下記の通り。

from PIL import Image
import glob

files = sorted(glob.glob('*.png'))
images = list(map(lambda file: Image.open(file).quantize(), files))
images[0].save('anime.gif', save_all=True, append_images=images[1:], loop=0,optimize=False, duration=2000)    

上記のプログラムは、同じフォルダ(ディレクトリ)にある「.png」を纏めてアニメーションを作る仕様なので、結合したい画像ファイルを配置して(下図)プログラムを実行すると、アニメーションが作成できる。(ちなみにduration=2000 変えれば画像の切替の早さを調整できる。)

スクリーンショット 2022-01-04 15.30.29

この機能を活用しながら、○○ームバーグのBreaking Newsのようなアニメーションを作ってみたい。

目を引くので、このGIFが気になっていたのだ。
では、早速やってみよう。

1.プログラム

import matplotlib.pyplot as plt
%matplotlib inline

# plt.rcParams["font.family"] = "fantasy"
plt.rcParams["font.family"] = "sans-serif"

plt.rcParams['axes.facecolor'] = '#ff001c' 
fig, ax1 = plt.subplots(figsize=(12,6.75),facecolor="#ff001c")
ax1.axes.xaxis.set_visible(False)
ax1.axes.yaxis.set_visible(False)
fig.patch.set_facecolor('#ff001c')

# 画像作成処理1
for i in range(1,100,10):
 #前の画像をクリアする処理
 ax1.clear()

 ax1.annotate("Hippenblog", (0.06,0.75),size=40,color="black",alpha=1,weight='bold')
 ax1.annotate("Breaking", (0.05,0.35),size=110,color="white",alpha=1)
 ax1.annotate("News", (0.05,0.10),size=110,color="black",alpha=1)
 ax1.axhline(0.6,0.065,0.99/(100/(i+1)),color='white',linewidth=1 ,alpha=1)
 fig.savefig("img"+ f'{i:03}' +".png")

# 画像作成処理2(線を動かす処理)
for i in range(100,200,10):
 ax1.axhline(0.6,0.065,0.99/(100/(i-100+1)),color='red',linewidth=1 ,alpha=1)
 fig.savefig("img"+ f'{i:03}' +".png")

#####################
from PIL import Image
import glob

def trim(path):
 im = Image.open(path)
 im_trimmed = im.crop((110,60,775,420))
 return im_trimmed

if __name__ == '__main__':
 files = sorted(glob.glob('*.png'))
 files = [name for name in files if name.split(".")[-1] in ["png"]]

 for val in files:
   path = "./" + val
   im_trimmed = trim(path)
   im_trimmed.save("./"+val, quality=100)

files = sorted(glob.glob('*.png'))
images = list(map(lambda file: Image.open(file).quantize(), files))
images[0].save('anime.gif', save_all=True, append_images=images[1:], loop=0,optimize=False, duration=100)    

2.実行結果

文字も動かしたかったけど難易度が高そうなので、とりあえず、「白いバー」だけうごかしてみた。

画像3

まぁ、それなりに良い感じにできたように思う。

早速、これで役に立たないニュース速報を流していきたいと思うw

複数の画像を結合して、アニメーションGIFを作成するコードの紹介でした。何かの参考になれば幸いです。

では!

「缶コーヒー1杯、ご馳走してあげよう」という太っ腹な人は投げ銭を!
課金しなくても、参考になったら「ハートボタン、フォロー、リツイート」をお願いします。読まれる可能性があがるので、次の記事を書くやる気が出ます。

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?