Wie man benutzerdefinierte EXIF-Daten zu einem Matplotlib-Plot mit PIL/Pillow hinzufügt
Das folgende Skript ist ein Beispiel, wie man PIL/Pillow verwendet, um benutzerdefinierte EXIF-Daten zu einem Matplotlib-Plot hinzuzufügen, der als PNG exportiert wurde.
Die Zwischen-IO wird über ein BytesIO abgewickelt, um das Schreiben temporärer Dateien zu vermeiden.
add_exif.py
import numpy as np
import matplotlib.pyplot as plt
from io import BytesIO
from PIL import Image
# Schritt 1: Sinusfunktion mit Matplotlib plotten
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.figure()
plt.plot(x, y)
plt.title('Sine Function')
plt.xlabel('x')
plt.ylabel('sin(x)')
# Schritt 2: Plot in ein BytesIO-Objekt speichern
buf = BytesIO()
plt.savefig(buf, format='png')
plt.close()
# Schritt 3: Benutzerdefinierte EXIF-Daten zur PNG-Datei hinzufügen
buf.seek(0)
image = Image.open(buf)
# Bild in RGB konvertieren (EXIF-Daten werden auf 'P'-Modus-Bildern nicht unterstützt)
image = image.convert('RGB')
# Dictionary zum Halten der EXIF-Daten erstellen
exif_dict = {
0x9003: '2024:08:04 12:00:00', # DateTimeOriginal
0x010E: 'Sine Wave Plot', # ImageDescription
0x0131: 'Matplotlib', # Software
}
# EXIF-Dictionary in Bytes konvertieren
exif_bytes = Image.Exif()
for tag, value in exif_dict.items():
exif_bytes[tag] = value
# Schritt 4: Modifiziertes Bild mit EXIF-Daten in ein neues BytesIO-Objekt speichern
output_buf = BytesIO()
image.save(output_buf, format='png', exif=exif_bytes)
output_buf.seek(0)
# Optional: Bild zur Überprüfung in eine Datei speichern
with open('sine_plot_with_exif.png', 'wb') as f:
f.write(output_buf.getvalue())Resultierender Plot

Wie man die resultierenden EXIF-Daten ausgibt
Sie können jedes EXIF-Tool zum Lesen der Daten verwenden, wie z. B. exiftool:
exiftool_read.sh
exiftool sine_plot_with_exif.pngBeispielausgabe:
exiftool_output.txt
ExifTool Version Number : 12.40
File Name : sine_plot_with_exif.png
File Size : 12345 bytes
File Modification Date/Time : 2024:08:04 12:00:00+00:00
...
Image Description : Sine Wave Plot
Date/Time Original : 2024:08:04 12:00:00
Software : Matplotlib
...Check out similar posts by category:
Python, MatPlotLib
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow