fix rotation issue

This commit is contained in:
otsmr 2025-02-09 12:41:44 +01:00
parent 5b3430bee6
commit c3f429a90a
7 changed files with 44 additions and 7 deletions

View file

@ -13,9 +13,6 @@ Don't be lonely, get twonly! Send pictures to a friend in real time and be sure
- MediaView: - MediaView:
- Bei weiteren geladenen Bildern -> Direkt anzeigen ohne pop - Bei weiteren geladenen Bildern -> Direkt anzeigen ohne pop
## Not my issues
- FIX: Problem Bild falsch, wenn handy schräg... -> Issue already openend
## TODOS bevor first release ## TODOS bevor first release
- Settings - Settings
- Subscription - Subscription

View file

@ -35,7 +35,7 @@
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/> <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Required to query activities that can process text, see: <!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and https://developer.android.com/training/package-visibility and
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.

View file

@ -77,7 +77,6 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override @override
void didChangeAppLifecycleState(AppLifecycleState state) { void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state); super.didChangeAppLifecycleState(state);
print("STATE: $state");
if (state == AppLifecycleState.resumed) { if (state == AppLifecycleState.resumed) {
apiProvider.connect(); apiProvider.connect();
} }

View file

@ -1,6 +1,8 @@
import 'dart:async'; import 'dart:async';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:exif/exif.dart';
import 'package:image/image.dart' as img;
class ImageItem { class ImageItem {
int width = 1; int width = 1;
@ -29,6 +31,29 @@ class ImageItem {
height = decodedImage.height; height = decodedImage.height;
width = decodedImage.width; width = decodedImage.width;
if (height < width) {
final exifData = await readExifFromBytes(bytes);
img.Image fixedImage;
if (height < width) {
debugPrint('Rotating image necessary');
final originalImage = img.decodeImage(bytes)!;
if (exifData['Image Orientation']!.printable.contains('Horizontal')) {
fixedImage = img.copyRotate(originalImage, angle: 90);
} else if (exifData['Image Orientation']!.printable.contains('180')) {
fixedImage = img.copyRotate(originalImage, angle: -90);
} else if (exifData['Image Orientation']!.printable.contains('CCW')) {
fixedImage = img.copyRotate(originalImage, angle: 180);
} else {
fixedImage = img.copyRotate(originalImage, angle: 0);
}
bytes = img.encodeJpg(fixedImage);
height = fixedImage.height;
width = fixedImage.width;
}
}
return loader.complete(true); return loader.complete(true);
} else { } else {
return loader.complete(false); return loader.complete(false);

View file

@ -35,9 +35,8 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
@override @override
void initState() { void initState() {
loadImage(widget.imageBytes);
super.initState(); super.initState();
loadImage(widget.imageBytes);
} }
@override @override

View file

@ -273,6 +273,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.1" version: "0.3.1"
exif:
dependency: "direct main"
description:
name: exif
sha256: a7980fdb3b7ffcd0b035e5b8a5e1eef7cadfe90ea6a4e85ebb62f87b96c7a172
url: "https://pub.dev"
source: hosted
version: "3.3.0"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@ -1138,6 +1146,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.0" version: "1.10.0"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:

View file

@ -16,6 +16,7 @@ dependencies:
collection: ^1.18.0 collection: ^1.18.0
connectivity_plus: ^6.1.2 connectivity_plus: ^6.1.2
cv: ^1.1.3 cv: ^1.1.3
exif: ^3.3.0
fixnum: ^1.1.1 fixnum: ^1.1.1
flutter: flutter:
sdk: flutter sdk: flutter