Reputation: 87
private processImage(fileSelected: File): Promise<{ url: string, gpsIncluded: boolean, fiveSecondLimit: boolean }> {
return new Promise((resolve, reject) => {
let reader = new FileReader();
Utilities.readFile(fileSelected, reader, (result) => {
let img = new Image();
img.src = result;
let maxResolution = Utilities.maxResolution;
this.imageService.resize(img, maxResolution, maxResolution).then((dataUrl) => {
let exifObj = this.imageService.getExifData(dataUrl);
let endDate = new Date();
let fileDate = this.imageService.getExifDateTimeOriginal(exifObj);
if (!fileDate || fileDate.toDateString() == 'Invalid Date') {
fileDate = new Date(fileSelected.lastModified);
}
let seconds = (endDate.getTime() - fileDate.getTime()) / 1000;
if (isNaN(seconds)) {
seconds = -1;
}
let fiveSecondLimit = seconds < 6;
let gpsLocationFound = this.imageService.gpsLocationFound(exifObj);
if (!gpsLocationFound && (seconds >= 0 && seconds <= 60) && !this.imageService.disabledGPS) {
this.imageService.setGPSLocation(dataUrl, exifObj).subscribe((_) => {
this.imageToDraw(_, fileDate, true, fileSelected.name).then(url => {
if (url) {
resolve({ url, gpsIncluded: true, fiveSecondLimit: fiveSecondLimit });
}
});
});
} else {
this.imageToDraw(dataUrl, fileDate, gpsLocationFound, fileSelected.name).then(url => {
if (url) {
resolve({ url, gpsIncluded: false, fiveSecondLimit: fiveSecondLimit });
}
});
}
});
});
})
}
getExifDateTimeOriginal(exifObj): Date {
if (exifObj) {
const dataStringa: string = exifObj['Exif'][piexif.ExifIFD.DateTimeOriginal];
if (!dataStringa || typeof dataStringa !== "string") {
return null;
}
if (dataStringa) {
const values = dataStringa.replace(' ', ':').split(':');
if (values.length == 6) {
const dateParsed = new Date(
parseInt(values[0]),
parseInt(values[1]) - 1,
parseInt(values[2]),
parseInt(values[3]),
parseInt(values[4]),
parseInt(values[5])
);
return dateParsed;
}
}
}
return null;
}
I have this function, processImage
, which basically processes an image when loaded in input with a button. It also gets its date, but in some cases the date returned is 01/01/1601 00:49. I've tried replicating the error but it works for me everytime just fine, but one of the users always gets that weird date. I know it's because it's kind of a "default date" but I don't get why it never works just for him. What can be the cause? The photos are loaded form a mobile device from its storage.
Upvotes: 0
Views: 14