인프런 리프 - 파이썬 고급 week4
여러 이미지들을 합쳐 하나의 gif 파일로 만드는 오픈소스를 작성해보자!
- 먼저 import할 라이브러리들을 작성
import glob # 내 디렉토리에 있는 파일들을 한번에 가져와 리스트로 변환
from PIL import Image
- PIL이 import 되지 않는다면 terminal에서 image 라이브러리 설치
pip install image
기능별로 확인
image 생성 경로
- path_in과 path_out 변수를 생성하여, 사용자 디렉토리에 맞는 경로를 설정한다.
- 필자의 경우, GIF로 만들 개별 png 파일들이 project/images 경로 내부에 있어 아래와 같이 작성.
- 최종적으로 생성될 GIF 파일은 project/image_out 경로 내부에 result.gif 라는 이름으로 생성되도록 path_out 설정.
path_in = '../project/images/*.png' # glob 덕분에, 확장자를 정한 후 다 가져올 수 있게된다.
path_out = '../project/image_out/result.gif'
첫 번째 이미지 와 모든 이미지 리스트 패킹, resize 필요한 경우
img, *images = [Image.open(f).resize((320,240), Image.ANTIALIAS)
for f in sorted(glob.glob(path_in))]
# ANITALIAS: 이미지의 여백 방지 -> 모두 같은 규격의 이미지를 가지면서, 여백이 생기지 않도록.
Image 저장
- gif를 만드는 핵심 로직
- 가장 첫번째 이미지인 img에 save() 메서드 적용
- 이때 인자로 들어가는 인스턴스는 미리 정의된 예약어 (ex: fp, format, append_images, save_all, duration, loop)
img.save(
fp=path_out, # fp: filename -> save() 메소드에 정의되어 있다.
format='GIF', # GIF 형식으로 저장
append_images=images, # 패킹된 images 리스트를 append
save_all=True,
duration=300, # GIF 파일의 움직임 속도를 조절 (숫자가 클 수록 전환속도가 느리다)
loop=0
)
클래스형으로 작성
- 위의 기능단위 코드를 하나의 클래스 내부에서 정의한다.
- 즉 하나의 클래스로 모든 과정을 수행할 수 있도록 정의.
class GifConverter:
def __init__(self, path_in=None, path_out=None, resize=(320, 240)):
"""
opensource는 초반에 파라미터에 대해 설명을 해주는 것이 좋다
"""
self.path_in = path_in or './*.png'
self.path_out = path_out or './output.gif'
self.resize = resize
def convert_gif(self):
img, *images = \
[Image.open(f).resize(self.resize, Image.ANTIALIAS) for f in
sorted(glob.glob(self.path_in))] # ANITALIAS: 여백 방지
try:
img.save(
fp=self.path_out, # fp: filename -> save() 메소드에 정의되어 있다.
format="GIF",
append_images=images,
save_all=True,
duration=500,
loop=0
)
except IOError:
print('Cannot covert!', img)
# 배포 했을 때 아래 if조건이 없으면, 우리가 테스트 한 코드가 그대로 사용되기에, \
# __name__ == '__main__' 조건을 달아준다.
if __name__ == '__main__':
# 클래스
c = GifConverter('../project/images/*.png', '../project/image_out/result.gif', (320, 240))
c.convert_gif()
모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
Author And Source
이 문제에 관하여(인프런 리프 - 파이썬 고급 week4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tbnsok40/인프런-리프-파이썬-고급-week4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)