#!/usr/bin/env python3 """ PWA 아이콘 생성 스크립트 원본 이미지를 다양한 크기의 아이콘으로 변환 """ from PIL import Image, ImageDraw, ImageFilter import os def create_rounded_icon(image, size, corner_radius=None): """둥근 모서리 아이콘 생성""" if corner_radius is None: corner_radius = size // 8 # 기본값: 크기의 1/8 # 이미지 리사이즈 img = image.resize((size, size), Image.Resampling.LANCZOS) # 마스크 생성 (둥근 사각형) mask = Image.new('L', (size, size), 0) draw = ImageDraw.Draw(mask) draw.rounded_rectangle([0, 0, size, size], corner_radius, fill=255) # 마스크 적용 result = Image.new('RGBA', (size, size), (0, 0, 0, 0)) result.paste(img, (0, 0)) result.putalpha(mask) return result def main(): # 원본 이미지 로드 source_image = "DSCF0333.RAF_compressed.JPEG" if not os.path.exists(source_image): print(f"❌ 원본 이미지를 찾을 수 없습니다: {source_image}") return try: with Image.open(source_image) as img: # RGB로 변환 (RGBA가 아닌 경우) if img.mode != 'RGB': img = img.convert('RGB') # 정사각형으로 크롭 (중앙 기준) width, height = img.size size = min(width, height) left = (width - size) // 2 top = (height - size) // 2 img = img.crop((left, top, left + size, top + size)) # 아이콘 크기 목록 icon_sizes = [ (72, "icon-72x72.png"), (96, "icon-96x96.png"), (128, "icon-128x128.png"), (144, "icon-144x144.png"), (152, "icon-152x152.png"), (192, "icon-192x192.png"), (384, "icon-384x384.png"), (512, "icon-512x512.png") ] # Apple Touch Icon (둥근 모서리 없음) apple_sizes = [ (180, "apple-touch-icon.png"), (167, "apple-touch-icon-ipad.png") ] # 아이콘 디렉토리 생성 icons_dir = "frontend/static/icons" os.makedirs(icons_dir, exist_ok=True) print("🎨 PWA 아이콘 생성 중...") # PWA 아이콘 생성 (둥근 모서리) for size, filename in icon_sizes: icon = create_rounded_icon(img, size) icon_path = os.path.join(icons_dir, filename) icon.save(icon_path, "PNG", optimize=True) print(f"✅ {filename} ({size}x{size})") # Apple Touch Icon 생성 (둥근 모서리 없음) for size, filename in apple_sizes: icon = img.resize((size, size), Image.Resampling.LANCZOS) icon_path = os.path.join(icons_dir, filename) icon.save(icon_path, "PNG", optimize=True) print(f"✅ {filename} ({size}x{size})") # 파비콘 생성 favicon_sizes = [(16, 16), (32, 32), (48, 48)] favicon_images = [] for size, _ in favicon_sizes: favicon = img.resize((size, size), Image.Resampling.LANCZOS) favicon_images.append(favicon) # 멀티 사이즈 favicon.ico 생성 favicon_path = "frontend/favicon.ico" favicon_images[0].save( favicon_path, format='ICO', sizes=[(16, 16), (32, 32), (48, 48)], append_images=favicon_images[1:] ) print(f"✅ favicon.ico (16x16, 32x32, 48x48)") print(f"\n🎉 총 {len(icon_sizes) + len(apple_sizes) + 1}개의 아이콘이 생성되었습니다!") print(f"📁 아이콘 위치: {icons_dir}/") except Exception as e: print(f"❌ 아이콘 생성 실패: {e}") if __name__ == "__main__": main()