Skip to content
Snippets Groups Projects
Verified Commit ae7e5b66 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Improve Metadata handling

parent cd5c35f9
No related branches found
No related tags found
1 merge request!1Replace entire project structure
import {Fragment} from "react"; import {Fragment} from "react";
import {ImageMetadata, ratioToTime} from "../metadata/ImageMetadata"; import {ImageMetadata, ratioToDistance, ratioToTime} from "../metadata/ImageMetadata";
import {ratioToFloat} from "../metadata/Ratio"; import {ratioToFloat} from "../metadata/Ratio";
import {ExposureMode} from "../metadata/ExposureMode"; import {ExposureMode} from "../metadata/ExposureMode";
import {ExposureProgram} from "../metadata/ExposureProgram"; import {ExposureProgram} from "../metadata/ExposureProgram";
...@@ -166,7 +166,7 @@ export default function ImageMetadataView({metadata}: ImageMetadataViewProps) { ...@@ -166,7 +166,7 @@ export default function ImageMetadataView({metadata}: ImageMetadataViewProps) {
{metadata.subjectDistance !== undefined && ( {metadata.subjectDistance !== undefined && (
<ListItem dense> <ListItem dense>
<ListItemIcon><ArrowExpandHorizontal/></ListItemIcon> <ListItemIcon><ArrowExpandHorizontal/></ListItemIcon>
<ListItemText primary="Subject Distance" secondary={metadata.subjectDistance}/> <ListItemText primary="Subject Distance" secondary={ratioToDistance(metadata.subjectDistance)}/>
</ListItem> </ListItem>
)} )}
{metadata.subjectDistanceRange !== undefined && ( {metadata.subjectDistanceRange !== undefined && (
......
import {parseRatio, Ratio} from "./Ratio"; import {parseRatio, Ratio, ratioToFloat} from "./Ratio";
import {Flash, parseFlash} from "./Flash"; import {Flash, parseFlash} from "./Flash";
import {ExposureMode, parseExposureMode} from "./ExposureMode"; import {ExposureMode, parseExposureMode} from "./ExposureMode";
import {ExposureProgram, parseExposureProgram} from "./ExposureProgram"; import {ExposureProgram, parseExposureProgram} from "./ExposureProgram";
...@@ -11,6 +11,7 @@ import {parseSharpnessProcessing, SharpnessProcessing} from "./SharpnessProcessi ...@@ -11,6 +11,7 @@ import {parseSharpnessProcessing, SharpnessProcessing} from "./SharpnessProcessi
import {parseSubjectDistanceRange, SubjectDistanceRange} from "./SubjectDistanceRange"; import {parseSubjectDistanceRange, SubjectDistanceRange} from "./SubjectDistanceRange";
export interface ImageMetadata { export interface ImageMetadata {
aspectRatio?: Ratio,
make?: string, make?: string,
model?: string, model?: string,
software?: string, software?: string,
...@@ -34,12 +35,16 @@ export interface ImageMetadata { ...@@ -34,12 +35,16 @@ export interface ImageMetadata {
sceneMode?: SceneMode, sceneMode?: SceneMode,
contrast?: ContrastProcessing, contrast?: ContrastProcessing,
sharpness?: SharpnessProcessing, sharpness?: SharpnessProcessing,
subjectDistance?: number, subjectDistance?: Ratio,
subjectDistanceRange?: SubjectDistanceRange, subjectDistanceRange?: SubjectDistanceRange,
} }
export function parseMetadata(metadata: { [key: string]: string | undefined }): ImageMetadata { export function parseMetadata(metadata?: { [key: string]: string | undefined }): ImageMetadata | undefined {
if (metadata === undefined) {
return undefined;
}
return { return {
aspectRatio: parseRatio(metadata["AspectRatio"]),
make: metadata["Make"], make: metadata["Make"],
model: metadata["Model"], model: metadata["Model"],
software: metadata["Software"], software: metadata["Software"],
...@@ -63,7 +68,7 @@ export function parseMetadata(metadata: { [key: string]: string | undefined }): ...@@ -63,7 +68,7 @@ export function parseMetadata(metadata: { [key: string]: string | undefined }):
sceneMode: parseSceneMode(metadata["SceneMode"]), sceneMode: parseSceneMode(metadata["SceneMode"]),
contrast: parseContrastProcessing(metadata["Contrast"]), contrast: parseContrastProcessing(metadata["Contrast"]),
sharpness: parseSharpnessProcessing(metadata["Sharpness"]), sharpness: parseSharpnessProcessing(metadata["Sharpness"]),
subjectDistance: parseNumber(metadata["SubjectDistance"]), subjectDistance: parseSubjectDistance(metadata["SubjectDistance"]),
subjectDistanceRange: parseSubjectDistanceRange(metadata["SubjectDistanceRange"]), subjectDistanceRange: parseSubjectDistanceRange(metadata["SubjectDistanceRange"]),
} }
} }
...@@ -106,6 +111,42 @@ export function ratioToTime(value: Ratio | undefined): string | undefined { ...@@ -106,6 +111,42 @@ export function ratioToTime(value: Ratio | undefined): string | undefined {
if (value.numerator > value.denominator) { if (value.numerator > value.denominator) {
return (value.numerator / value.denominator).toFixed(0) + "s"; return (value.numerator / value.denominator).toFixed(0) + "s";
} else { } else {
return "1/" + (value.denominator / value.numerator) + "s"; return "1/" + (value.denominator / value.numerator).toFixed(0) + "s";
}
}
export function ratioToDistance(value: Ratio | undefined): string | undefined {
if (value === undefined) {
return undefined;
}
if (value.numerator === Infinity) {
return "";
}
const numeric = value.numerator / value.denominator;
const magnitude = Math.floor(Math.log10(numeric));
switch (magnitude) {
case 0:
case -1:
case -2:
return `${(numeric * 100).toFixed(0)} cm`;
case -3:
return `${(numeric * 1000).toFixed(0)} mm`;
default:
if (magnitude >= 0) return `${numeric.toFixed(0)} m`;
else return `${numeric} m`;
}
}
export function parseSubjectDistance(value: string | undefined): Ratio | undefined {
const numericValue = parseRatio(value);
if (numericValue === undefined) {
return undefined;
}
if (ratioToFloat(numericValue) === 4294967295) {
return {
numerator: Infinity,
denominator: 1,
};
} }
return numericValue;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment