from PIL import Image import os import math Image.MAX_IMAGE_PIXELS = None # Schutz bei großen Bildern deaktivieren # === KONFIGURATION === image_path = "areno_map.png" # Pfad zur großen Karte output_dir = "tiles" # Zielverzeichnis für die Tiles tile_size = 256 # Größe eines Tiles max_zoom = 7 # Zoom-Stufen 0–7 def generate_leaflet_tiles(image_path, output_dir, tile_size=256, max_zoom=7): original = Image.open(image_path) orig_width, orig_height = original.size for z in range(max_zoom + 1): scale = 2 ** (max_zoom - z) width = math.ceil(orig_width / scale) height = math.ceil(orig_height / scale) # Kein Resize bei maximaler Zoomstufe (Originalgröße) if z == max_zoom: resized = original else: resized = original.resize((width, height), Image.Resampling.LANCZOS) tiles_x = math.ceil(width / tile_size) tiles_y = math.ceil(height / tile_size) offset_x = tiles_x // 2 offset_y = tiles_y // 2 for x in range(tiles_x): for y in range(tiles_y): left = x * tile_size upper = y * tile_size right = min(left + tile_size, width) lower = min(upper + tile_size, height) tile = resized.crop((left, upper, right, lower)) tile_x = x - offset_x tile_y = y - offset_y dir_path = os.path.join(output_dir, str(z), str(tile_x)) os.makedirs(dir_path, exist_ok=True) tile_path = os.path.join(dir_path, f"{tile_y}.png") tile.save(tile_path) print(f"✅ Zoom {z} fertig – {tiles_x}×{tiles_y} Tiles") print("🎉 Alle Tiles erfolgreich generiert.") generate_leaflet_tiles(image_path, output_dir, tile_size, max_zoom)