Make EXIF parsing more compatible
This commit is contained in:
parent
8d525820db
commit
4c092cef54
@ -1,6 +1,25 @@
|
|||||||
import { formatExposureCompensation, formatExposureTime } from '@/utility/exif';
|
import {
|
||||||
|
convertApertureValueToFNumber,
|
||||||
|
formatExposureCompensation,
|
||||||
|
formatExposureTime,
|
||||||
|
} from '@/utility/exif';
|
||||||
|
|
||||||
describe('EXIF', () => {
|
describe('EXIF', () => {
|
||||||
|
describe('converts', () => {
|
||||||
|
it('aperture value to f-number', () => {
|
||||||
|
expect(convertApertureValueToFNumber('0')).toBe('1');
|
||||||
|
expect(convertApertureValueToFNumber('1')).toBe('1.4');
|
||||||
|
expect(convertApertureValueToFNumber('2')).toBe('2');
|
||||||
|
expect(convertApertureValueToFNumber('3')).toBe('2.8');
|
||||||
|
expect(convertApertureValueToFNumber('4')).toBe('4');
|
||||||
|
expect(convertApertureValueToFNumber('5')).toBe('5.6');
|
||||||
|
expect(convertApertureValueToFNumber('6')).toBe('8');
|
||||||
|
expect(convertApertureValueToFNumber('7')).toBe('11');
|
||||||
|
expect(convertApertureValueToFNumber('8')).toBe('16');
|
||||||
|
expect(convertApertureValueToFNumber('9')).toBe('22');
|
||||||
|
expect(convertApertureValueToFNumber('10')).toBe('32');
|
||||||
|
});
|
||||||
|
});
|
||||||
describe('formats', () => {
|
describe('formats', () => {
|
||||||
it('exposure time', () => {
|
it('exposure time', () => {
|
||||||
expect(formatExposureTime(0)).toBe(undefined);
|
expect(formatExposureTime(0)).toBe(undefined);
|
||||||
|
|||||||
@ -6,7 +6,11 @@ import {
|
|||||||
generateLocalNaivePostgresString,
|
generateLocalNaivePostgresString,
|
||||||
generateLocalPostgresString,
|
generateLocalPostgresString,
|
||||||
} from '@/utility/date';
|
} from '@/utility/date';
|
||||||
import { getAspectRatioFromExif, getOffsetFromExif } from '@/utility/exif';
|
import {
|
||||||
|
convertApertureValueToFNumber,
|
||||||
|
getAspectRatioFromExif,
|
||||||
|
getOffsetFromExif,
|
||||||
|
} from '@/utility/exif';
|
||||||
import { roundToNumber } from '@/utility/number';
|
import { roundToNumber } from '@/utility/number';
|
||||||
import { convertStringToArray } from '@/utility/string';
|
import { convertStringToArray } from '@/utility/string';
|
||||||
import { generateNanoid } from '@/utility/nanoid';
|
import { generateNanoid } from '@/utility/nanoid';
|
||||||
@ -199,8 +203,11 @@ export const convertExifToFormData = (
|
|||||||
focalLengthIn35MmFormat: data.tags?.FocalLengthIn35mmFormat?.toString(),
|
focalLengthIn35MmFormat: data.tags?.FocalLengthIn35mmFormat?.toString(),
|
||||||
lensMake: data.tags?.LensMake,
|
lensMake: data.tags?.LensMake,
|
||||||
lensModel: data.tags?.LensModel,
|
lensModel: data.tags?.LensModel,
|
||||||
fNumber: data.tags?.FNumber?.toString(),
|
fNumber: (
|
||||||
iso: data.tags?.ISO?.toString(),
|
data.tags?.FNumber?.toString() ||
|
||||||
|
convertApertureValueToFNumber(data.tags?.ApertureValue)
|
||||||
|
),
|
||||||
|
iso: data.tags?.ISO?.toString() || data.tags?.ISOSpeed?.toString(),
|
||||||
exposureTime: data.tags?.ExposureTime?.toString(),
|
exposureTime: data.tags?.ExposureTime?.toString(),
|
||||||
exposureCompensation: data.tags?.ExposureCompensation?.toString(),
|
exposureCompensation: data.tags?.ExposureCompensation?.toString(),
|
||||||
latitude:
|
latitude:
|
||||||
|
|||||||
@ -31,6 +31,36 @@ export const getAspectRatioFromExif = (data: ExifData): number => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const convertApertureValueToFNumber = (
|
||||||
|
apertureValue?: string
|
||||||
|
): string | undefined => {
|
||||||
|
if (apertureValue) {
|
||||||
|
const aperture = parseInt(apertureValue);
|
||||||
|
if (aperture <= 10) {
|
||||||
|
switch (aperture) {
|
||||||
|
case 0: return '1';
|
||||||
|
case 1: return '1.4';
|
||||||
|
case 2: return '2';
|
||||||
|
case 3: return '2.8';
|
||||||
|
case 4: return '4';
|
||||||
|
case 5: return '5.6';
|
||||||
|
case 6: return '8';
|
||||||
|
case 7: return '11';
|
||||||
|
case 8: return '16';
|
||||||
|
case 9: return '22';
|
||||||
|
case 10: return '32';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const value = Math.round(Math.pow(2, aperture / 2.0) * 10) / 10;
|
||||||
|
return Number.isInteger(value)
|
||||||
|
? value.toFixed(0)
|
||||||
|
: value.toFixed(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const formatAperture = (aperture?: number) =>
|
export const formatAperture = (aperture?: number) =>
|
||||||
aperture
|
aperture
|
||||||
? `ƒ/${roundToString(aperture)}`
|
? `ƒ/${roundToString(aperture)}`
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user