LoginSignup
8
4

More than 5 years have passed since last update.

[Python]静止画を動くGIFにするプログラムの作り方その2

Last updated at Posted at 2018-02-24

静止画を動く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にするプログラムの作り方でした。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4