ente/lib/utils/exif_util.dart

48 lines
1.4 KiB
Dart
Raw Normal View History

2021-08-24 07:14:33 +00:00
import 'dart:io' as io;
import 'package:exif/exif.dart';
import 'package:intl/intl.dart';
import 'package:logging/logging.dart';
2021-08-24 07:14:33 +00:00
import 'package:photos/models/file.dart';
import 'package:photos/utils/file_util.dart';
const kDateTimeOriginal = "EXIF DateTimeOriginal";
const kImageDateTime = "Image DateTime";
const kExifDateTimePattern = "yyyy:MM:dd HH:mm:ss";
const kEmptyExifDateTime = "0000:00:00 00:00:00";
final _logger = Logger("ExifUtil");
2021-08-24 07:14:33 +00:00
Future<Map<String, IfdTag>> getExif(File file) async {
2021-09-28 09:24:41 +00:00
try {
final originFile = await getFile(file, isOrigin: true);
final exif = await readExifFromFile(originFile);
if (!file.isRemoteFile() && io.Platform.isIOS) {
await originFile.delete();
}
return exif;
} catch (e) {
_logger.severe("failed to getExif", e);
2021-09-28 09:24:41 +00:00
rethrow;
2021-08-24 07:14:33 +00:00
}
}
Future<DateTime> getCreationTimeFromEXIF(io.File file) async {
try {
final exif = await readExifFromFile(file);
if (exif != null) {
final exifTime = exif.containsKey(kDateTimeOriginal)
? exif[kDateTimeOriginal].printable
: exif.containsKey(kImageDateTime)
? exif[kImageDateTime].printable
: null;
if (exifTime != null && exifTime != kEmptyExifDateTime) {
return DateFormat(kExifDateTimePattern).parse(exifTime);
}
}
} catch (e) {
_logger.severe("failed to getCreationTimeFromEXIF", e);
}
return null;
}