# -*- coding: utf-8 -*-

### ### ### ### ###
'Karten_anpassen_und_GIF.py'
# Anpassung der aus QGIS exportierten Karten und Erzeugung des GIF
#
# Autor: Philipp Weisenburger
# ORCID: 0009-0004-7665-4526
# Zitation: Weisenburger (2026) - Visualisierung von DWD-Rasterdaten mit QGIS und Python
# Lizenz: CC BY-NC 4.0
#
### ### ### ### ###

import os
import numpy as np
from pathlib import Path
import sys

import time
t_anfang = time.time()


### ### ### ### ###
'1) Erzeugung eines GIF aus den DWD Karten für Sommertage'
'Beschriftung (Überschrift, Jahreszahl, Skala und Maßstab) auf Bildern einfügen'
### ### ### ### ###

# PIL importieren
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

# Pfad zu den files:
file_root = str(Path().resolve())  # lokalen Pfad auflösen
Karten_path = str(file_root + "\\QGIS_Karten")
Skala_DWD = str(file_root + "\\Aux_files\\Farben_DWD_Skala.png")
Box_DWD = str(file_root + "\\Aux_files\\Maßstab.png")
background = str(file_root + "\\Aux_files\\background.png")

# Liste aller aus QGIS exportierten Karten
maps = os. listdir(Karten_path)
maps = maps[0:-1] # "Thumbs.db" entfernen
print(maps)

# An Anzahl der Jahre bei Bedarf anpassen
years = np.arange(1951,2026)


# Alle Karten einzeln ergänzen und abspeichern
i=0
for i in np.arange(0,len(years)):
	Karte_name = maps[i]
	
	# Bilder (Karte, Maßstab und Skala) öffnen
	img0 = Image.open(background) # Hintergrund Größe 7552 x 10000
	img1 = Image.open(str(Karten_path + "\\" + Karte_name)) # Karte aus QGIS
	scale = Image.open(Skala_DWD) # Skala
	box = Image.open(Box_DWD) # Maßstab
	
	# Karte zuschneiden und Bilder einfügen
	img = img0.crop((150, 0, 6800, 10000)) # left, upper, right, lower
	img.paste(img1, (150,606))
	img.paste(scale, (630, 9320)) # Skala einfügen
	img.paste(box, (655, 9170)) # Maßstab einfügen
	
	
	# ImageDraw aufrufen um Texte einzufügen
	I1 = ImageDraw.Draw(img)
	
	# Custom font style und font size - eventuell muss die font auf eine vorhandene angepasst werden
	myFont1 = ImageFont.truetype('FrutigerLTCom-Light.ttf', 380) # Headline
	myFont2 = ImageFont.truetype('FrutigerLTCom-Light.ttf', 300) # Jahre
	
	# Texte einfügen
	I1.text((470, 230), "Anzahl der Sommertage (T > 25°C)", font=myFont1, fill =(0, 0, 0))
	I1.text((470, 710), str(years[i]), font=myFont2, fill =(0, 0, 0))
	
	# Angepasste Karte anzeigen
	#img.show() # öffnet jedes Bild einzeln, nicht zwingend erforderlich
	
	# Angepasste Karte speichern
	new_name = str(file_root + "\\Karten_vollständig\\" + Karte_name[:-4] + "_ergänzt.png")
	img.save(new_name)
	print(Karte_name)

sys.exit()


### ### ### ### ###
'2) GIF aus allen Bildern erstellen'
# Hilfe: https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imread.html
# Erlaubte Formate für gif-Erstellung: https://imageio.readthedocs.io/en/stable/formats/index.html
### ### ### ### ###

import imageio.v3 as iio
images = []
image_names = []

i=0
for i in np.arange(0,len(years)):
	Karte_name = maps[i]
	name_string = str(file_root + "\\Karten_vollständig\\" + Karte_name[:-4] + "_ergänzt.png")
	
	image_names.append(name_string)
	
for name in image_names:
	images.append(iio.imread(name))
	print(name[-27:])
	
GIF_name = str(file_root + "\\GIF\\" + "Sommertage_GIF.gif")
iio.imwrite(GIF_name, images, duration = 400, loop = 0)
## duration == Zeit in ms pro Karte



### ### ### ### ###
'ENDE'
### ### ### ### ###

t_ende = time.time()
Dauer = (t_ende - t_anfang)  # *1000 für ms
print('Rechenzeit in s: ', Dauer)

time_c = time.asctime()
print(time_c)
print('Ende des Programms')




