Update changes
Dieser Commit ist enthalten in:
97
app.js
97
app.js
@ -311,9 +311,14 @@ function createMetadataSection(title, data, icon = '📋', cssClass = '') {
|
||||
for (const [key, value] of Object.entries(data)) {
|
||||
const formattedKey = formatMetadataKey(key);
|
||||
const formattedValue = formatMetadataValue(key, value);
|
||||
const tooltip = getMetadataTooltip(key, formattedKey);
|
||||
|
||||
html += `
|
||||
<tr>
|
||||
<td>${formattedKey}</td>
|
||||
<td>
|
||||
${formattedKey}
|
||||
${tooltip ? `<span class="info-icon" title="${tooltip}"><img src="icons/info.svg" alt="Info"></span>` : ''}
|
||||
</td>
|
||||
<td>${formattedValue}</td>
|
||||
</tr>
|
||||
`;
|
||||
@ -518,29 +523,48 @@ function formatMetadataKey(key) {
|
||||
// Remove common prefixes and format
|
||||
key = key.replace(/^(EXIF|GPS|IPTC|XMP)/, '');
|
||||
|
||||
// Add spaces before capital letters
|
||||
key = key.replace(/([A-Z])/g, ' $1').trim();
|
||||
|
||||
// Special formatting for known keys
|
||||
// Special formatting for known keys - do first before adding spaces
|
||||
const keyMap = {
|
||||
'Make': 'Kamera-Hersteller',
|
||||
'Model': 'Kamera-Modell',
|
||||
'DateTime Original': 'Aufnahmedatum',
|
||||
'DateTimeOriginal': 'Aufnahmedatum',
|
||||
'Exposure Time': 'Belichtungszeit',
|
||||
'ExposureTime': 'Belichtungszeit',
|
||||
'F Number': 'Blende',
|
||||
'FNumber': 'Blende',
|
||||
'ISO Speed Ratings': 'ISO-Wert',
|
||||
'ISOSpeedRatings': 'ISO-Wert',
|
||||
'Focal Length': 'Brennweite',
|
||||
'FocalLength': 'Brennweite',
|
||||
'Flash': 'Blitz',
|
||||
'GPS Latitude': 'Breitengrad',
|
||||
'GPSLatitude': 'Breitengrad',
|
||||
'GPS Longitude': 'Längengrad',
|
||||
'GPSLongitude': 'Längengrad',
|
||||
'GPS Altitude': 'Höhe',
|
||||
'GPSAltitude': 'Höhe',
|
||||
'Lens Model': 'Objektiv',
|
||||
'LensModel': 'Objektiv',
|
||||
'White Balance': 'Weißabgleich',
|
||||
'WhiteBalance': 'Weißabgleich',
|
||||
'Exposure Mode': 'Belichtungsmodus',
|
||||
'Color Space': 'Farbraum'
|
||||
'ExposureMode': 'Belichtungsmodus',
|
||||
'Color Space': 'Farbraum',
|
||||
'ColorSpace': 'Farbraum'
|
||||
};
|
||||
|
||||
return keyMap[key.trim()] || key;
|
||||
// Check if we have a known key first
|
||||
if (keyMap[key]) {
|
||||
return keyMap[key];
|
||||
}
|
||||
|
||||
// Add spaces before capital letters but preserve acronyms
|
||||
key = key.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2'); // For cases like "GPSLatitude" -> "GPS Latitude"
|
||||
key = key.replace(/([a-z\d])([A-Z])/g, '$1 $2'); // For cases like "dateTime" -> "date Time"
|
||||
key = key.trim();
|
||||
|
||||
return keyMap[key] || key;
|
||||
}
|
||||
|
||||
// Format metadata values for display
|
||||
@ -632,6 +656,65 @@ let currentFileData = null;
|
||||
let currentMetadata = null;
|
||||
let currentPreviewUrl = null;
|
||||
|
||||
// Get tooltips for metadata fields
|
||||
function getMetadataTooltip(key, formattedKey) {
|
||||
const tooltips = {
|
||||
'ISO-Wert': 'Die Lichtempfindlichkeit des Kamerasensors. Höhere Werte (z.B. 1600) bedeuten mehr Empfindlichkeit, aber auch mehr Bildrauschen.',
|
||||
'Blende': 'Die Öffnung des Objektivs (f-Zahl). Kleinere Zahlen (z.B. f/1.8) bedeuten eine größere Öffnung und mehr Licht.',
|
||||
'Belichtungszeit': 'Wie lange der Kamerasensor dem Licht ausgesetzt ist. Z.B. 1/100 bedeutet eine Hundertstelsekunde.',
|
||||
'Brennweite': 'Der Abstand zwischen Objektiv und Sensor in Millimetern. Bestimmt den Bildausschnitt.',
|
||||
'Weißabgleich': 'Einstellung zur korrekten Farbwiedergabe unter verschiedenen Lichtbedingungen.',
|
||||
'Belichtungsmodus': 'Automatik, Manuell, Blendenpriorität oder Zeitpriorität - bestimmt wie die Kamera die Belichtung steuert.',
|
||||
'Farbraum': 'Definiert den Bereich der darstellbaren Farben (z.B. sRGB für Web, Adobe RGB für Druck).',
|
||||
'Breitengrad': 'GPS-Koordinate für die Nord-Süd-Position des Aufnahmeortes.',
|
||||
'Längengrad': 'GPS-Koordinate für die Ost-West-Position des Aufnahmeortes.',
|
||||
'Höhe': 'Höhe über dem Meeresspiegel am Aufnahmeort.',
|
||||
'Objektiv': 'Das verwendete Kameraobjektiv mit seinen technischen Eigenschaften.',
|
||||
'Blitz': 'Informationen darüber, ob und wie der Blitz verwendet wurde.',
|
||||
'ExposureCompensation': 'Belichtungskorrektur - manuelle Anpassung der automatischen Belichtung.',
|
||||
'MeteringMode': 'Messmethode für die Belichtung (Spot, Matrix, Mittenbetont).',
|
||||
'FocalLengthIn35mmFilm': 'Brennweite umgerechnet auf Kleinbildformat für bessere Vergleichbarkeit.',
|
||||
'DigitalZoomRatio': 'Digitaler Zoom-Faktor - elektronische Vergrößerung mit Qualitätsverlust.',
|
||||
'SceneCaptureType': 'Art der Aufnahme (Landschaft, Portrait, Nachtaufnahme).',
|
||||
'SubjectDistanceRange': 'Entfernungsbereich zum Motiv (Makro, Nah, Fern).',
|
||||
'Sharpness': 'Nachschärfung - digitale Kantenbetonung des Bildes.',
|
||||
'Saturation': 'Farbsättigung - Intensität der Farben im Bild.',
|
||||
'Contrast': 'Kontrast - Unterschied zwischen hellen und dunklen Bereichen.',
|
||||
'GainControl': 'Verstärkungsregelung - elektronische Signalverstärkung bei wenig Licht.',
|
||||
// Neue Erklärungen
|
||||
'ApertureValue': 'Blendenwert in APEX-Einheiten - technische Darstellung der Blendenöffnung für Berechnungen.',
|
||||
'Aperture Value': 'Blendenwert in APEX-Einheiten - technische Darstellung der Blendenöffnung für Berechnungen.',
|
||||
'ExposureBiasValue': 'Belichtungskorrektur in EV-Stufen. +1 bedeutet doppelt so hell, -1 halb so hell.',
|
||||
'Exposure Bias Value': 'Belichtungskorrektur in EV-Stufen. +1 bedeutet doppelt so hell, -1 halb so hell.',
|
||||
'MaxApertureValue': 'Größte Blendenöffnung des Objektivs (kleinste f-Zahl) - bestimmt die maximale Lichtmenge.',
|
||||
'Max Aperture Value': 'Größte Blendenöffnung des Objektivs (kleinste f-Zahl) - bestimmt die maximale Lichtmenge.',
|
||||
'ExposureProgram': 'Kameraeinstellung: 0=Unbekannt, 1=Manuell, 2=Normal, 3=Blendenpriorität, 4=Zeitpriorität, 5=Kreativ, 6=Action, 7=Portrait, 8=Landschaft.',
|
||||
'Exposure Program': 'Kameraeinstellung: 0=Unbekannt, 1=Manuell, 2=Normal, 3=Blendenpriorität, 4=Zeitpriorität, 5=Kreativ, 6=Action, 7=Portrait, 8=Landschaft.',
|
||||
'SubSampling': 'Farbunterabtastung bei JPEG - bestimmt wie Farbinformationen gespeichert werden (4:2:2 oder 4:2:0).',
|
||||
'YCbCrSubSampling': 'Farbunterabtastung bei JPEG - bestimmt wie Farbinformationen gespeichert werden (4:2:2 oder 4:2:0).',
|
||||
'Orientation': 'Bildausrichtung: 1=Normal, 3=180° gedreht, 6=90° rechts gedreht, 8=90° links gedreht.',
|
||||
'YCbCrPositioning': 'Position der Farbinformationen: 1=Zentriert (üblich), 2=Co-sited (professionell).',
|
||||
'Y Cb Cr Positioning': 'Position der Farbinformationen: 1=Zentriert (üblich), 2=Co-sited (professionell).',
|
||||
'ExifIFDPointer': 'Technischer Verweis auf den Speicherort der EXIF-Daten in der Datei.',
|
||||
'EXIF IFD Pointer': 'Technischer Verweis auf den Speicherort der EXIF-Daten in der Datei.',
|
||||
'ExifVersion': 'Version des EXIF-Standards (z.B. 0232 = Version 2.32) - bestimmt verfügbare Metadatenfelder.',
|
||||
'EXIF Version': 'Version des EXIF-Standards (z.B. 0232 = Version 2.32) - bestimmt verfügbare Metadatenfelder.',
|
||||
'ShutterSpeedValue': 'Verschlusszeit in APEX-Einheiten - technische Darstellung für Berechnungen.',
|
||||
'Shutter Speed Value': 'Verschlusszeit in APEX-Einheiten - technische Darstellung für Berechnungen.',
|
||||
'BrightnessValue': 'Objekthelligkeit in APEX-Einheiten - Messwert der Motivhelligkeit.',
|
||||
'Brightness Value': 'Objekthelligkeit in APEX-Einheiten - Messwert der Motivhelligkeit.',
|
||||
'OffsetTime': 'Zeitzonenversatz zur UTC-Zeit bei der Aufnahme (z.B. +02:00 für MESZ).',
|
||||
'Offset Time': 'Zeitzonenversatz zur UTC-Zeit bei der Aufnahme (z.B. +02:00 für MESZ).',
|
||||
'OffsetTimeOriginal': 'Ursprünglicher Zeitzonenversatz bei der Aufnahme - bleibt bei Bearbeitung erhalten.',
|
||||
'Offset Time Original': 'Ursprünglicher Zeitzonenversatz bei der Aufnahme - bleibt bei Bearbeitung erhalten.',
|
||||
'ImageUniqueID': 'Einzigartige Bild-ID aus Datum, Kameraseriennummer und Bildnummer - identifiziert das Bild eindeutig.',
|
||||
'Image Unique ID': 'Einzigartige Bild-ID aus Datum, Kameraseriennummer und Bildnummer - identifiziert das Bild eindeutig.'
|
||||
};
|
||||
|
||||
// Check both the original key and formatted key
|
||||
return tooltips[formattedKey] || tooltips[key] || null;
|
||||
}
|
||||
|
||||
// Generate PDF report
|
||||
async function generateReport() {
|
||||
if (!currentFileData) {
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren