静止画を動くGIFにするプログラムと解説です。
「その1」はこれです。
[Python]静止画を動くGIFにするプログラムの作り方その1 - Qiita
おおまかに言うとこのプログラムは、
元の画像の一部を切り取るという作業を繰り返しているだけです。
そして、切り取る際には少し位置を変えて切り取ってゆきます。
そして最後に、切り取り後の画像をひとつにまとめてGIFにしています。
画像のY座標とx座標のようなものを表す変数がありますが、元の画像と、GIF用の画像の二種類の変数あります。
詳細は以下のプログラムに書きました。
from PIL import Image, ImageDraw
images = [] #複数の画像を入れるリストを定義
iti=0 #画像を切り取る位置を表す変数
im1 = Image.open('a.jpg') #元になる画像を入れる
im1 = im1.convert('RGB') #RGBにする
size = im1.size #元になる画像の縦横の大きさを変数に入れる
yokohaba = size[0] // 2 #GIFにするときの横幅を決めて変数に入れる。今回は元の画像の2分の1。size[0]は元の画像の横幅を意味する。size[1]は元の画像の縦幅を意味する。
size2 = (yokohaba, size[1]) #GIFにするときの縦横の大きさを変数に入れる
#yとxは、もとの画像のY座標とx座標のようなものを表す
#y2とx2は、GIFになる画像のY座標とx座標のようなものを表す
#r、g、bはそれぞれ赤、緑、青の色の濃さを表す
for num in range(10): #10回くりかえす(枠が右に進む動き)
im2 = Image.new('RGB', size2) #画像のベースをim2に入れる
y2=0
for y in range(size[1]):
x2 = -1
for x in range(size[0]):
if iti <= x < yokohaba+iti: #切り取りたい範囲のときだけ実行する
x2 = x2 + 1
r, g, b = im1.getpixel((x, y)) #元の画像(im1)の(x,y)の色の情報をr、g、bに入れる。
im2.putpixel((x2 ,y2) ,(r,g,b)) #GIFにする画像の(x2 ,y2)の場所に色の情報を入れる
else:
pass #条件にあてはならないなら何も実行しない
y2 = y2 + 1
images.append(im2) #出来上がった画像(im2)をリスト(images)に追加(append)する
henka = size[0] // 60 #動かす距離を決めて変数に入れる。今回は元の画像の60分の1
iti=iti+henka #次に切り取る位置を計算して変数に入れる
for num in range(10): #10回くりかえす(枠が左に進む動き)
im2 = Image.new('RGB', size2)
y2=0
for y in range(size[1]):
x2 = -1
for x in range(size[0]):
if iti <= x < yokohaba+iti:
x2 = x2 + 1
r, g, b = im1.getpixel((x, y))
im2.putpixel((x2 ,y2) ,(r,g,b))
else:
pass
y2 = y2 + 1
images.append(im2)
henka = size[0] // 60
iti=iti-henka #動きが逆なのでここはマイナスになる
im3 = images.pop(0)
im3.save('a.gif', save_all=True, append_images=images, optimize=False, duration=50, loop=0) #並んだ複数の画像をGIFにして保存
ちなみに「duration=50」の部分は数値を変えると画像の切り替えが早くなります。
それでは以上が静止画を動くGIFにするプログラムの作り方でした。