From 636d4de1b6ab2e0d0bb2b5eb11f48835a1806886 Mon Sep 17 00:00:00 2001 From: otsmr Date: Fri, 18 Jul 2025 11:22:14 +0200 Subject: [PATCH] fix #255 --- lib/src/services/thumbnail.service.dart | 34 ++----------------- lib/src/utils/misc.dart | 8 ++++- .../save_to_gallery.dart | 11 ++++-- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/lib/src/services/thumbnail.service.dart b/lib/src/services/thumbnail.service.dart index 0be7362..e1311e7 100644 --- a/lib/src/services/thumbnail.service.dart +++ b/lib/src/services/thumbnail.service.dart @@ -1,40 +1,10 @@ import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:path/path.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:video_thumbnail/video_thumbnail.dart'; -Future createThumbnails(String directoryPath) async { - final directory = Directory(directoryPath); - final outputDirectory = await getTemporaryDirectory(); - - if (directory.existsSync()) { - final files = directory.listSync(); - - for (final file in files) { - if (file is File) { - final filePath = file.path; - final fileExtension = filePath.split('.').last.toLowerCase(); - - if (['jpg', 'jpeg', 'png'].contains(fileExtension)) { - // Create thumbnail for images - final image = await decodeImageFromList(file.readAsBytesSync()); - final thumbnail = await image.toByteData(format: ImageByteFormat.png); - final thumbnailFile = - File('${outputDirectory.path}/${file.uri.pathSegments.last}'); - await thumbnailFile.writeAsBytes(thumbnail!.buffer.asUint8List()); - } else if (['mp4', 'mov', 'avi'].contains(fileExtension)) { - // Create thumbnail for videos - } - } - } - } -} - Future createThumbnailsForImage(File file) async { final fileExtension = file.path.split('.').last.toLowerCase(); if (fileExtension != 'png') { @@ -47,8 +17,8 @@ Future createThumbnailsForImage(File file) async { minHeight: 800, minWidth: 450, file.path, - format: CompressFormat.png, - quality: 30, + format: CompressFormat.webp, + quality: 50, ); if (imageBytesCompressed == null) { diff --git a/lib/src/utils/misc.dart b/lib/src/utils/misc.dart index f02321c..41f2bff 100644 --- a/lib/src/utils/misc.dart +++ b/lib/src/utils/misc.dart @@ -26,12 +26,18 @@ extension ShortCutsExtension on BuildContext { } Future saveImageToGallery(Uint8List imageBytes) async { + final jpgImages = await FlutterImageCompress.compressWithList( + // ignore: avoid_redundant_argument_values + format: CompressFormat.jpeg, + imageBytes, + quality: 100, + ); final hasAccess = await Gal.hasAccess(); if (!hasAccess) { await Gal.requestAccess(); } try { - await Gal.putImageBytes(imageBytes); + await Gal.putImageBytes(jpgImages); return null; } on GalException catch (e) { return e.type.message; diff --git a/lib/src/views/camera/camera_preview_components/save_to_gallery.dart b/lib/src/views/camera/camera_preview_components/save_to_gallery.dart index 111adbe..2f67d3f 100644 --- a/lib/src/views/camera/camera_preview_components/save_to_gallery.dart +++ b/lib/src/views/camera/camera_preview_components/save_to_gallery.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:flutter/material.dart'; +import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:path/path.dart'; import 'package:twonly/src/services/api/media_upload.dart'; @@ -75,10 +76,16 @@ class SaveToGalleryButtonState extends State { res = await saveVideoToGallery(widget.videoFilePath!.path); } } else { - memoryPath += '.png'; final imageBytes = await widget.getMergedImage(); if (imageBytes == null || !mounted) return; - await File(memoryPath).writeAsBytes(imageBytes); + final webPImageBytes = + await FlutterImageCompress.compressWithList( + format: CompressFormat.webp, + imageBytes, + quality: 100, + ); + memoryPath += '.png'; + await File(memoryPath).writeAsBytes(webPImageBytes); unawaited(createThumbnailsForImage(File(memoryPath))); if (storeToGallery) { res = await saveImageToGallery(imageBytes);