Last active
September 30, 2024 06:43
-
-
Save partrita/f7f93ffe22a29f6876a3cbc45c4df246 to your computer and use it in GitHub Desktop.
다수의 png 파일로 gif 만드는 파이썬 스크립트
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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