WorldMapTile/tile_exporter.py

56 lines
1.9 KiB
Python
Raw Normal View History

2026-01-03 00:05:18 +01:00
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 07
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)