Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

ルパン三世タイトル画面風GIFアニメーションを作る

テレビアニメ・ルパン三世のタイトル画面風のGIFアニメーションを作ります。特大フォントで一文字づつ表示し、最後にタイトル全体を表示します。

関連記事

画像を描画しアニメーションGIFを作成する

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • Pillow 5.2.0
コード

11文字からなるタイトルから一文字ずつ取り出して400ptで画像の中央に表示させ、最後にタイトル全体を表示します。タイトル全体は2行に表示しますが、タイトルを1~6文字目とそれ以降の2つに分割するためモジュールtextwrapを使用しています。

from PIL import Image, ImageDraw, ImageFont
import textwrap

title = '殺し屋はブルースを歌う'
images =[]  # イメージ用リスト

for letter in title:  # for文でタイトルから一文字づつ取り出す
    im = Image.new('RGB', (640, 480), (0, 0, 0))  # 下地となるイメージオブジェクトの生成
    draw = ImageDraw.Draw(im)  # drawオブジェクトを生成  
    font = ImageFont.truetype('C:\Windows\Fonts\msmincho.ttc', 400)  # フォントの指定
    draw.multiline_text((120, 40), letter, fill=(255,255,255), font=font) # 文字の描画
    images.append(im)  # リストにイメージを追加  

wrap_list = textwrap.wrap(title, 6)  # タイトルを6文字で改行しリストwrap_listに代入
im = Image.new('RGB', (640, 480), (0, 0, 0))  # 下地となるイメージオブジェクトの生成
draw = ImageDraw.Draw(im)  # drawオブジェクトを生成
font = ImageFont.truetype('C:\Windows\Fonts\msmincho.ttc', 96)  # フォントの指定
draw.multiline_text((35, 120), wrap_list[0], fill=(255,255,255), font=font) # タイトル1行目描画
draw.multiline_text((35, 280), wrap_list[1], fill=(255,255,255), font=font) # タイトル2行目描画
for i in range(8):  # 同じ画像を8枚追加するためfor文
    images.append(im)  # リストにイメージを追加  
    
images[0].save('Lupin_title.gif',save_all=True,append_images=images[1:],optimize=False,duration=400,loop=0)  # gif動画保存
実行結果

ルパン三世のタイトルっぽいGIFアニメーションが保存されます。
画像1枚あたり400msで表示されます。タイトル全体の画像は同じ画像が8枚連続しており3秒以上表示されるようにしています。
f:id:T_A_T:20200209150838g:plain

以下のサイトを参考にさせていただきました

note.nkmk.me>>Pythonで文字列を折り返し・切り詰めして整形するtextwrap

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村