애니메이션 이미지는 여러개의 이미지가 겹쳐진 gif 포맷으로 되어 있다
그 이미지를 파이썬에 적용하기 위해서는 gif 가 몇장의 이미지로 구성되어 있는지 확인을 해야한다.
gif 읽기 방법은 gif 의 이미지들 모두 읽어서 각각 리스트에 저장하고
다음 이미지를 한장씩 보여주면서 애니메이션이 재생되는 방식이다.
그래서 리스트에 gif 에 포함된 모든 이미지를 저장하고 index를 증가시키면서 다음이미지를 보여준다.
for 문과 PhotoImage 함수를 이용하여 gif 파일 안에 이미지를 하나씩 읽어 올 수 있다. 이때 중요한 부분은 format 설정임(아래 코드 참조)
from tkinter import * # tkinter에서 모든 정의를 임포트한다.
class LoadGIFImage:
def __init__(self):
window = Tk() # 윈도우 생성
window.title("GIF Image Example") # 제목을 설정
window.geometry("640x480") # 윈도우 크기 설정
window.resizable(0,0)
self.canvas = Canvas(window, bg = "white")
self.canvas.pack(expand=True,fill=BOTH)
self.my_image_number = 0
#마지막 range(60) 에서 60 은 gif 이미지 수를 나타냄
#gif 파일의 이미지를 한장씩 읽고 리스트에 저장함
self.myimages = [PhotoImage(file='dragon-gif.gif',format = 'gif -index %i' %(i)) for i in range(60)]
#아래 코드에서 subsample(2) 는 이미지 크기를 작게함. 인수 값에 따라 작아짐
#self.myimages = [PhotoImage(file='dragon-gif.gif',format = 'gif -index %i' %(i)).subsample(1) for i in range(60)]
#이미지를 canvas에 그리고 id 값을 생성후 self.dragon 변수에 저장
self.dragon = self.canvas.create_image(300,240, image = self.myimages[0],tags="dragon")
self.canvas.create_text(320,360,font="Times 15 italic bold",text="Load GIF Image")
while True:
#canvas에서 self.dragon 이미지를 읽어오고 gif의 다음 이미지로 교체함
self.canvas.itemconfig(self.dragon, image = self.myimages[self.my_image_number%len(self.myimages)])
self.my_image_number += 1
window.after(33)
window.update()
#window.mainloop() # 이벤트 루프를 생성한다.
LoadGIFImage() # GUI 생성한다.
'IT > 파이썬(Python)' 카테고리의 다른 글
파이썬 tkinter canvas GUI 메뉴 만들기 코드 (0) | 2022.04.04 |
---|---|
파이썬 tkinter 마우스 이벤트 코드 예제, 이벤트 종류, bind 함수 설명, (0) | 2022.04.04 |
파이썬 tkinter 키보드 이벤트 이미지 애니메이션 bind (0) | 2022.04.04 |
파이썬 키보드 이벤트 (tkinter, bind, event.keycode) 게임 (0) | 2022.03.29 |
게임 사운드 (0) | 2022.03.26 |