fix: used png instead of jpg to maintain picture quality
This commit is contained in:
@@ -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 +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);
|
||||||
|
|||||||
Reference in New Issue
Block a user