fix: handle remote asset orientation

This commit is contained in:
shenlong-tanwen
2024-10-02 00:12:54 +05:30
committed by Mert Alev
parent 0da5146e11
commit 4dbe2cc662
5 changed files with 295 additions and 31 deletions
+24 -3
View File
@@ -23,6 +23,7 @@ class ExifInfo {
String? state;
String? country;
String? description;
String? orientation;
@ignore
bool get hasCoordinates =>
@@ -45,6 +46,9 @@ class ExifInfo {
@ignore
String get focalLength => mm != null ? mm!.toStringAsFixed(1) : "";
@ignore
bool get isFlipped => _isOrientationFlipped(orientation);
@ignore
double? get latitude => lat;
@@ -67,7 +71,8 @@ class ExifInfo {
city = dto.city,
state = dto.state,
country = dto.country,
description = dto.description;
description = dto.description,
orientation = dto.orientation;
ExifInfo({
this.id,
@@ -87,6 +92,7 @@ class ExifInfo {
this.state,
this.country,
this.description,
this.orientation,
});
ExifInfo copyWith({
@@ -107,6 +113,7 @@ class ExifInfo {
String? state,
String? country,
String? description,
String? orientation,
}) =>
ExifInfo(
id: id ?? this.id,
@@ -126,6 +133,7 @@ class ExifInfo {
state: state ?? this.state,
country: country ?? this.country,
description: description ?? this.description,
orientation: orientation ?? this.orientation,
);
@override
@@ -147,7 +155,8 @@ class ExifInfo {
city == other.city &&
state == other.state &&
country == other.country &&
description == other.description;
description == other.description &&
orientation == other.orientation;
}
@override
@@ -169,7 +178,8 @@ class ExifInfo {
city.hashCode ^
state.hashCode ^
country.hashCode ^
description.hashCode;
description.hashCode ^
orientation.hashCode;
@override
String toString() {
@@ -192,10 +202,21 @@ class ExifInfo {
state: $state,
country: $country,
description: $description,
orientation: $orientation
}""";
}
}
bool _isOrientationFlipped(String? orientation) {
final value = orientation != null ? int.tryParse(orientation) : null;
if (value == null) {
return false;
}
final isRotated90CW = value == 5 || value == 6 || value == 90;
final isRotated270CW = value == 7 || value == 8 || value == -90;
return isRotated90CW || isRotated270CW;
}
double? _exposureTimeToSeconds(String? s) {
if (s == null) {
return null;