Flutter 壓縮圖像的最佳方式
引言
作為開發者的我們,經常會做一些上傳圖檔和和儲存圖檔啦的功能,但是由于一些圖檔非常大,我們在上傳或者儲存的時候會占用大量的網絡資源和本地資源,那麼我們需要做的就是對圖檔進行壓縮。
昨天在寫如何接入微信分享的時候用到一個知識點,就是圖檔壓縮
當時我用了flutter_image_compress
可能大家都知道Dart 已經有圖檔壓縮庫了。為什麼要使用原生?
還不是因為他的效率問題,
是以今天就和大家來說一說它的具體用法吧。
1.flutter_image_compress
安裝
dependencies:
flutter_image_compress: ^1.0.0-nullsafety
使用的地方導入
import 'package:flutter_image_compress/flutter_image_compress.dart';
/// 圖檔壓縮 File -> Uint8List
Future<Uint8List> testCompressFile(File file) async {
var result = await FlutterImageCompress.compressWithFile(
file.absolute.path,
minWidth: 2300,
minHeight: 1500,
quality: 94,
rotate: 90,
);
print(file.lengthSync());
print(result.length);
return result;
}
/// 圖檔壓縮 File -> File
Future<File> testCompressAndGetFile(File file, String targetPath) async {
var result = await FlutterImageCompress.compressAndGetFile(
file.absolute.path, targetPath,
quality: 88,
rotate: 180,
);
print(file.lengthSync());
print(result.lengthSync());
return result;
}
/// 圖檔壓縮 Asset -> Uint8List
Future<Uint8List> testCompressAsset(String assetName) async {
var list = await FlutterImageCompress.compressAssetImage(
assetName,
minHeight: 1920,
minWidth: 1080,
quality: 96,
rotate: 180,
);
return list;
}
/// 圖檔壓縮 Uint8List -> Uint8List
Future<Uint8List> testComporessList(Uint8List list) async {
var result = await FlutterImageCompress.compressWithList(
list,
minHeight: 1920,
minWidth: 1080,
quality: 96,
rotate: 135,
);
print(list.length);
print(result.length);
return result;
}
還有另外兩種方式
2.使用 image_picker 包的 imageQuality 參數
圖像選擇器
3.使用 flutter_native_image 包
安裝
flutter_native_image: ^0.0.6
文檔位址
pub.flutter-io.cn/packages/fl…
用法
Future<File> compressFile(File file) async{
File compressedFile = await FlutterNativeImage.compressImage(file.path,
quality: 5,);
return compressedFile;
}
關于如何計算所選檔案的圖像大小的嗎?
您可以以位元組為機關擷取檔案長度,并以千位元組或兆位元組等計算。
像這樣:file.readAsBytesSync().lengthInBytes -> 檔案大小以位元組為機關的檔案大小
(file.readAsBytesSync().lengthInBytes) / 1024 -> 檔案大小以千位元組為機關的檔案大小
(file.readAsBytesSync().lengthInBytes) / 1024 / 1024 -> 檔案大小以兆位元組為機關