From 28127cf4870d8967377966018524d32abbd075f0 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 28 Jul 2022 14:32:25 +0700 Subject: [PATCH] TF-761 Add CompressFileUtils to handle compress and reduce image --- core/lib/core.dart | 1 + core/lib/data/utils/compress_file_utils.dart | 37 ++++++++++++++++++++ core/pubspec.yaml | 2 ++ 3 files changed, 40 insertions(+) create mode 100644 core/lib/data/utils/compress_file_utils.dart diff --git a/core/lib/core.dart b/core/lib/core.dart index 1adf41bae..14294087b 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -35,6 +35,7 @@ export 'utils/fps_manager.dart'; export 'utils/build_utils.dart'; export 'utils/wrapper.dart'; export 'utils/string_convert.dart'; +export 'data/utils/compress_file_utils.dart'; // Views export 'presentation/views/text/slogan_builder.dart'; diff --git a/core/lib/data/utils/compress_file_utils.dart b/core/lib/data/utils/compress_file_utils.dart new file mode 100644 index 000000000..6f43766cb --- /dev/null +++ b/core/lib/data/utils/compress_file_utils.dart @@ -0,0 +1,37 @@ + +import 'dart:typed_data'; + +import 'package:core/utils/app_logger.dart'; +import 'package:flutter_image_compress/flutter_image_compress.dart'; + +class CompressFileUtils { + + /// Maximum image size displayed + static const int MAXIMUM_IMAGE_SIZE_KB = 300; + /// Quality image 0 - 100 + static const int QUALITY_DEFAULT = 50; + /// Max image width + static const int MAX_IMAGE_WIDTH = 1000; + + bool _exceedMaximumImageSize(Uint8List bytesData) { + final maximumSizeBytes = MAXIMUM_IMAGE_SIZE_KB * 1024; + final sizeBytesData = bytesData.length; + log('CompressFileUtils::exceedMaximumImageSize(): maximumSizeBytes: $maximumSizeBytes'); + log('CompressFileUtils::exceedMaximumImageSize(): sizeBytesData: $sizeBytesData'); + return sizeBytesData > maximumSizeBytes; + } + + Future compressBytesDataImage(Uint8List bytesData, {int? maxWidth}) async { + if (_exceedMaximumImageSize(bytesData)) { + log('CompressFileUtils::_compressImageData(): BEFORE_COMPRESS: bytesData: ${bytesData.lengthInBytes}'); + final bytesCompressed = await FlutterImageCompress.compressWithList( + bytesData, + quality: QUALITY_DEFAULT, + minWidth: maxWidth ?? MAX_IMAGE_WIDTH); + log('CompressFileUtils::_compressImageData(): AFTER_COMPRESS_MOBILE: bytesData: ${bytesCompressed.lengthInBytes}'); + return bytesCompressed; + } else { + return bytesData; + } + } +} \ No newline at end of file diff --git a/core/pubspec.yaml b/core/pubspec.yaml index 257405847..5485045d2 100644 --- a/core/pubspec.yaml +++ b/core/pubspec.yaml @@ -77,6 +77,8 @@ dependencies: flex_color_picker: 2.5.0 + flutter_image_compress: 1.1.0 + dev_dependencies: flutter_test: sdk: flutter