#!/usr/bin/env python3 """ Script untuk generate placeholder images untuk aplikasi Wisata Lumajang AR. Jalankan script ini di folder root project. Requirements: - pip install Pillow Usage: python generate_placeholders.py """ from PIL import Image, ImageDraw, ImageFont import os # Definisi wisata dengan warna dan deskripsi destinations = [ { "filename": "gunung_lemongan", "name": "Gunung Lemongan", "color": "#A0826D", "text_color": "white", }, { "filename": "gunung_semeru", "name": "Gunung Semeru", "color": "#704214", "text_color": "white", }, { "filename": "pantai_watu_godeg", "name": "Pantai Watu Godeg", "color": "#4ECDC4", "text_color": "white", }, { "filename": "pantai_watu_pecak", "name": "Pantai Watu Pecak", "color": "#00A99D", "text_color": "white", }, { "filename": "puncak_b29", "name": "Puncak B29", "color": "#8B7D6B", "text_color": "white", }, { "filename": "ranu_kumbolo", "name": "Ranu Kumbolo", "color": "#2196F3", "text_color": "white", }, { "filename": "ranu_pani", "name": "Ranu Pani", "color": "#1565C0", "text_color": "white", }, { "filename": "ranu_regulo", "name": "Ranu Regulo", "color": "#42A5F5", "text_color": "white", }, ] # Konfigurasi OUTPUT_DIR = "android/wisata_app/assets/images" IMAGE_WIDTH = 1080 IMAGE_HEIGHT = 720 QUALITY = 85 def create_placeholder_image(filename, name, color, text_color): """ Create a placeholder image with gradient background and text. Args: filename: Output filename without extension name: Text to display on image color: Hex color code for background text_color: Text color """ # Convert hex to RGB color_rgb = tuple(int(color.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)) text_color_rgb = (255, 255, 255) if text_color == "white" else (0, 0, 0) # Create base image with gradient img = Image.new('RGB', (IMAGE_WIDTH, IMAGE_HEIGHT), color=color_rgb) draw = ImageDraw.Draw(img, 'RGBA') # Add gradient overlay (darker at bottom) for y in range(IMAGE_HEIGHT): alpha = int((y / IMAGE_HEIGHT) * 100) dark_color = (*color_rgb, alpha) draw.line([(0, y), (IMAGE_WIDTH, y)], fill=dark_color) # Try to use a nice font, fallback to default try: font_size = 72 font = ImageFont.truetype("arial.ttf", font_size) small_font = ImageFont.truetype("arial.ttf", 32) except: font = ImageFont.load_default() small_font = ImageFont.load_default() # Draw text in center text_bbox = draw.textbbox((0, 0), name, font=font) text_width = text_bbox[2] - text_bbox[0] text_x = (IMAGE_WIDTH - text_width) // 2 text_y = (IMAGE_HEIGHT - 100) // 2 # Draw with shadow effect draw.text((text_x + 2, text_y + 2), name, font=font, fill=(0, 0, 0, 128)) draw.text((text_x, text_y), name, font=font, fill=(*text_color_rgb, 255)) # Draw subtitle subtitle = "Destinasi Wisata Lumajang" draw.text( (IMAGE_WIDTH // 2, IMAGE_HEIGHT - 80), subtitle, font=small_font, fill=(*text_color_rgb, 200), anchor="mm" ) # Save image output_path = os.path.join(OUTPUT_DIR, f"{filename}.jpg") os.makedirs(OUTPUT_DIR, exist_ok=True) img.save(output_path, "JPEG", quality=QUALITY) print(f"✓ Generated: {output_path}") def main(): """Generate all placeholder images.""" print(f"Generating {len(destinations)} placeholder images...") print(f"Output directory: {OUTPUT_DIR}") print() for dest in destinations: create_placeholder_image( dest["filename"], dest["name"], dest["color"], dest["text_color"] ) print() print("✓ All placeholder images generated successfully!") print(f"✓ Total images: {len(destinations)}") if __name__ == "__main__": main()