Lorenzo Bertolaccini
Lorenzo Bertolaccini

Reputation: 87

EXIF date from image returns 01/01/1601 00:49 for just one user

      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

Answers (0)

Related Questions