1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2025-01-14 14:43:17 +08:00
pigallery2/common/entities/PhotoDTO.ts

85 lines
2.2 KiB
TypeScript
Raw Normal View History

import {DirectoryDTO} from './DirectoryDTO';
2018-11-02 10:40:09 +01:00
import {ImageSize} from './PhotoDTO';
import {OrientationTypes} from 'ts-exif-parser';
2016-12-27 20:55:51 +01:00
export interface PhotoDTO {
id: number;
name: string;
directory: DirectoryDTO;
metadata: PhotoMetadata;
readyThumbnails: Array<number>;
readyIcon: boolean;
2016-12-27 20:55:51 +01:00
}
export interface PhotoMetadata {
keywords: Array<string>;
cameraData: CameraMetadata;
positionData: PositionMetaData;
2018-11-02 10:40:09 +01:00
orientation: OrientationTypes;
size: ImageSize;
creationDate: number;
fileSize: number;
2016-12-27 20:55:51 +01:00
}
export interface ImageSize {
width: number;
height: number;
2016-12-27 20:55:51 +01:00
}
export interface CameraMetadata {
ISO?: number;
model?: string;
2017-07-10 22:00:22 +02:00
make?: string;
fStop?: number;
exposure?: number;
focalLength?: number;
lens?: string;
2016-12-27 20:55:51 +01:00
}
export interface PositionMetaData {
GPSData?: GPSMetadata;
country?: string;
state?: string;
city?: string;
2016-12-27 20:55:51 +01:00
}
export interface GPSMetadata {
latitude?: number;
longitude?: number;
2017-07-18 23:27:14 +02:00
altitude?: number;
2018-05-13 16:59:57 -04:00
}
2016-12-27 20:55:51 +01:00
2018-05-13 16:59:57 -04:00
export module PhotoDTO {
export const hasPositionData = (photo: PhotoDTO): boolean => {
return !!photo.metadata.positionData &&
!!(photo.metadata.positionData.city ||
photo.metadata.positionData.state ||
photo.metadata.positionData.country ||
(photo.metadata.positionData.GPSData &&
photo.metadata.positionData.GPSData.altitude &&
photo.metadata.positionData.GPSData.latitude &&
photo.metadata.positionData.GPSData.longitude));
};
2018-11-02 10:40:09 +01:00
export const isSideWay = (photo: PhotoDTO): boolean => {
return photo.metadata.orientation === OrientationTypes.LEFT_TOP ||
photo.metadata.orientation === OrientationTypes.RIGHT_TOP ||
photo.metadata.orientation === OrientationTypes.LEFT_BOTTOM ||
photo.metadata.orientation === OrientationTypes.RIGHT_BOTTOM;
};
export const getRotatedSize = (photo: PhotoDTO): ImageSize => {
if (isSideWay(photo)) {
// noinspection JSSuspiciousNameCombination
return {width: photo.metadata.size.height, height: photo.metadata.size.width};
}
return photo.metadata.size;
};
export const calcRotatedAspectRatio = (photo: PhotoDTO): number => {
const size = getRotatedSize(photo);
return size.width / size.height;
};
}