Skip to content

Instantly share code, notes, and snippets.

@partrita
Last active September 30, 2024 06:43
Show Gist options
  • Save partrita/f7f93ffe22a29f6876a3cbc45c4df246 to your computer and use it in GitHub Desktop.
Save partrita/f7f93ffe22a29f6876a3cbc45c4df246 to your computer and use it in GitHub Desktop.
다수의 png 파일로 gif 만드는 파이썬 스크립트
import os
from PIL import Image
import argparse
from typing import List, Optional
def generate_gif(path: str, duration: int = 100) -> Optional[str]:
# PNG 파일만 필터링
img_list: List[str] = [f for f in os.listdir(path) if f.lower().endswith('.png')]
# 파일명으로 정렬
img_list.sort()
# 전체 경로 생성
img_paths: List[str] = [os.path.join(path, img) for img in img_list]
if not img_paths:
print("No PNG files found in the specified directory.")
return None
images: List[Image.Image] = []
for img_path in img_paths:
try:
with Image.open(img_path) as img:
# RGBA 모드로 변환하여 투명 배경 생성
img_rgba: Image.Image = img.convert("RGBA")
# 최종 이미지를 RGB 모드로 변환 (GIF는 알파 채널을 지원하지 않음)
images.append(img_rgba)
except IOError:
print(f"Error opening {img_path}. Skipping this file.")
if not images:
print("No valid images found.")
return None
output_path: str = os.path.join(path, 'output.gif')
# 첫 번째 이미지를 기준으로 GIF 저장
images[0].save(output_path,
save_all=True,
append_images=images[1:],
loop=0,
duration=duration,
disposal=2) # disposal=2는 각 프레임을 지우고 다음 프레임을 그립니다.
print(f"GIF created: {output_path}")
return output_path
if __name__ == "__main__":
parser: argparse.ArgumentParser = argparse.ArgumentParser(description="Generate GIF from PNG files in a folder")
parser.add_argument("folder_path", help="Path to the folder containing PNG files")
parser.add_argument("--duration", type=int, default=100, help="Duration of each frame in milliseconds (default: 100)")
args: argparse.Namespace = parser.parse_args()
gif_path: Optional[str] = generate_gif(args.folder_path, args.duration)
if gif_path:
print(f"GIF generated successfully at: {gif_path}")
else:
print("Failed to generate GIF.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment