1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#!/usr/bin/python3
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import argparse
# Funktion zum Erstellen des Temperaturdiagramms mit Achsenbeschriftungen und Transparenz
def create_temperature_plot_with_labels(output_filename):
times = np.arange(0, 24, 0.5) # Zeitpunkte (alle halbe Stunde)
temperatures = 20 + 10 * np.sin(times / 24 * 2 * np.pi) # Beispielhafte Sinuskurve für Temperaturen
# Grenzen für die y-Achse basierend auf den Temperaturdaten
min_temp = np.floor(min(temperatures) / 5) * 5 # Abrunden auf das nächste Vielfache von 5
max_temp = np.ceil(max(temperatures) / 5) * 5 # Aufrunden auf das nächste Vielfache von 5
# Temperaturdiagramm zeichnen
plt.figure(figsize=(8, 2), dpi=100) # Größe des Diagramms: 800x100 Pixel
plt.plot(times, temperatures, color='yellow', linewidth=5, label='Temperatur')
plt.ylim(min_temp, max_temp) # Y-Achse auf den Bereich der Daten begrenzen
plt.xlabel('Uhrzeit', color='white') # X-Achsenbeschriftung
plt.ylabel('Temperatur in °C', color='white') # Y-Achsenbeschriftung
plt.xticks(np.arange(0, 25, 4), color='white') # X-Achse in 4-Stunden-Schritten beschriften
plt.yticks(np.arange(min_temp, max_temp + 1, 5), color='white') # Y-Achse in Schritten von 5 beschriften
plt.grid(color='gray', linestyle='--', linewidth=0.5, alpha=0.7)
plt.tight_layout()
# Diagramm mit transparentem Hintergrund speichern
plt.savefig(output_filename, transparent=True, bbox_inches='tight')
plt.close()
# Funktion zum Laden und Überprüfen des Basisbildes
def load_and_check_base_image(image_path):
try:
base_image = Image.open(image_path)
if base_image.size != (1024, 768):
raise ValueError("Das Basisbild muss eine Größe von 1024x768 Pixeln haben.")
return base_image
except Exception as e:
print(f"Fehler beim Laden des Basisbildes: {e}")
return None
# Funktion zum Überlagern des Diagramms auf das Basisbild
def overlay_plot_on_image(base_image_path, plot_image_path, output_image_path):
try:
base_image = Image.open(base_image_path)
plot_image = Image.open(plot_image_path)
# Überlagern des Diagramms auf das Basisbild (mit Transparenz)
base_image.paste(plot_image, (112, 0), plot_image) # Zentrieren: (1024 - 800) / 2 = 112
# Kombiniertes Bild speichern
base_image.save(output_image_path)
print(f"Kombiniertes Bild gespeichert als {output_image_path}")
except Exception as e:
print(f"Fehler beim Überlagern des Diagramms: {e}")
# Hauptfunktion
def main():
parser = argparse.ArgumentParser(description="Overlay transparentes Temperaturdiagramm auf ein Bild.")
parser.add_argument("image", help="Pfad zum Basisbild (1024x768 Pixel)")
parser.add_argument("output", help="Pfad zum kombinierten Ausgabebild")
args = parser.parse_args()
base_image_path = args.image
output_image_path = args.output
# Temporäre Datei für das transparente Temperaturdiagramm
plot_filename = "temperature_plot_with_labels.png"
# Schritte ausführen: Diagramm erstellen und überlagern
create_temperature_plot_with_labels(plot_filename)
overlay_plot_on_image(base_image_path, plot_filename, output_image_path)
if __name__ == "__main__":
main()
|