Przeglądaj źródła

Compress iOS thumbnails

Vishnu Mohandas 4 lat temu
rodzic
commit
47052a6596
3 zmienionych plików z 14 dodań i 3 usunięć
  1. 1 0
      lib/core/constants.dart
  2. 11 1
      lib/utils/file_uploader.dart
  3. 2 2
      lib/utils/file_util.dart

+ 1 - 0
lib/core/constants.dart

@@ -1,6 +1,7 @@
 const int THUMBNAIL_SMALL_SIZE = 256;
 const int THUMBNAIL_SMALL_SIZE_QUALITY = 80;
 const int THUMBNAIL_LARGE_SIZE = 512;
+const int COMPRESSED_THUMBNAIL_RESOLUTION = 1080;
 const int THUMBNAIL_DATA_LIMIT = 100 * 1024;
 const String SENTRY_DSN =
     "http://96780dc0b00f4c69a16c02e90d379996@3.211.17.56/2";

+ 11 - 1
lib/utils/file_uploader.dart

@@ -4,6 +4,7 @@ import 'dart:convert';
 import 'dart:io' as io;
 import 'package:connectivity/connectivity.dart';
 import 'package:dio/dio.dart';
+import 'package:flutter_image_compress/flutter_image_compress.dart';
 import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
@@ -15,6 +16,7 @@ import 'package:photos/models/location.dart';
 import 'package:photos/models/upload_url.dart';
 import 'package:photos/services/collections_service.dart';
 import 'package:photos/utils/crypto_util.dart';
+import 'package:photos/utils/file_util.dart';
 
 class FileUploader {
   final _logger = Logger("FileUploader");
@@ -153,7 +155,7 @@ class FileUploader {
     final fileAttributes =
         await CryptoUtil.encryptFile(sourceFile.path, encryptedFilePath);
 
-    final thumbnailData = (await (await file.getAsset()).thumbDataWithSize(
+    var thumbnailData = (await (await file.getAsset()).thumbDataWithSize(
       THUMBNAIL_LARGE_SIZE,
       THUMBNAIL_LARGE_SIZE,
       quality: 50,
@@ -162,6 +164,14 @@ class FileUploader {
       _logger.severe("Could not generate thumbnail for " + file.toString());
       throw InvalidFileError();
     }
+    final thumbnailSize = thumbnailData.length;
+    if (thumbnailSize > THUMBNAIL_DATA_LIMIT) {
+      thumbnailData = await compressThumbnail(thumbnailData);
+      _logger.info("Thumbnail size " + thumbnailSize.toString());
+      _logger
+          .info("Compressed thumbnail size " + thumbnailData.length.toString());
+    }
+
     final encryptedThumbnailName =
         file.generatedID.toString() + "_thumbnail.encrypted";
     final encryptedThumbnailPath = tempDirectory + encryptedThumbnailName;

+ 2 - 2
lib/utils/file_util.dart

@@ -289,8 +289,8 @@ Uint8List decryptFileKey(File file) {
 Future<Uint8List> compressThumbnail(Uint8List thumbnail) {
   return FlutterImageCompress.compressWithList(
     thumbnail,
-    minHeight: 1080,
-    minWidth: 1080,
+    minHeight: COMPRESSED_THUMBNAIL_RESOLUTION,
+    minWidth: COMPRESSED_THUMBNAIL_RESOLUTION,
     quality: 25,
   );
 }