fix: used png instead of jpg to maintain picture quality

This commit is contained in:
Yashraj Jain
2024-10-09 11:36:42 +05:30
parent a37a2470a8
commit 04f2ed54e4
2 changed files with 16 additions and 7 deletions
+2 -1
View File
@@ -38,7 +38,8 @@ class CropImagePage extends HookWidget {
size: 24, size: 24,
), ),
onPressed: () async { onPressed: () async {
final croppedImage = await cropController.croppedImage(); final croppedImage = await cropController.croppedImage(
quality: FilterQuality.high);
context.pushRoute( context.pushRoute(
EditImageRoute( EditImageRoute(
asset: asset, asset: asset,
+14 -6
View File
@@ -14,6 +14,9 @@ import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/providers/album/album.provider.dart'; import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'dart:async';
import 'dart:ui' as ui;
import 'package:flutter/rendering.dart';
/// A stateless widget that provides functionality for editing an image. /// A stateless widget that provides functionality for editing an image.
/// ///
@@ -39,16 +42,18 @@ class EditImagePage extends ConsumerWidget {
final Completer<Uint8List> completer = Completer(); final Completer<Uint8List> completer = Completer();
image.image.resolve(const ImageConfiguration()).addListener( image.image.resolve(const ImageConfiguration()).addListener(
ImageStreamListener( ImageStreamListener(
(ImageInfo info, bool _) { (ImageInfo info, bool _) async {
info.image try {
.toByteData(format: ImageByteFormat.png) final ByteData? byteData =
.then((byteData) { await info.image.toByteData(format: ui.ImageByteFormat.png);
if (byteData != null) { if (byteData != null) {
completer.complete(byteData.buffer.asUint8List()); completer.complete(byteData.buffer.asUint8List());
} else { } else {
completer.completeError('Failed to convert image to bytes'); completer.completeError('Failed to convert image to bytes');
} }
}); } catch (e) {
completer.completeError('Error converting image: $e');
}
}, },
onError: (exception, stackTrace) => onError: (exception, stackTrace) =>
completer.completeError(exception), completer.completeError(exception),
@@ -65,9 +70,12 @@ class EditImagePage extends ConsumerWidget {
) async { ) async {
try { try {
final Uint8List imageData = await _imageToUint8List(image); final Uint8List imageData = await _imageToUint8List(image);
// Use PNG format for lossless quality
final String fileName =
"${p.withoutExtension(asset.fileName)}_edited.png";
await ref.read(fileMediaRepositoryProvider).saveImage( await ref.read(fileMediaRepositoryProvider).saveImage(
imageData, imageData,
title: "${p.withoutExtension(asset.fileName)}_edited.jpg", title: fileName,
); );
await ref.read(albumProvider.notifier).getDeviceAlbums(); await ref.read(albumProvider.notifier).getDeviceAlbums();
Navigator.of(context).popUntil((route) => route.isFirst); Navigator.of(context).popUntil((route) => route.isFirst);