Flutter 压缩图像的最佳方式
【摘要】 引言作为开发者的我们,经常会做一些上传图片和和保存图片啦的功能,但是由于一些图片非常大,我们在上传或者保存的时候会占用大量的网络资源和本地资源,那么我们需要做的就是对图片进行压缩。昨天在写如何接入微信分享的时候用到一个知识点,就是图片压缩当时我用了flutter_image_compress可能大家都知道Dart 已经有图片压缩库了。为什么要使用原生?还不是因为他的效率问题,所以今天就和大家...
作为开发者的我们,经常会做一些上传图片和和保存图片啦的功能,但是由于一些图片非常大,我们在上传或者保存的时候会占用大量的网络资源和本地资源,那么我们需要做的就是对图片进行压缩。
昨天在写的时候用到一个知识点,就是图片压缩
当时我用了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
文档地址
https://pub.flutter-io.cn/packages/flutter_native_image
用法
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 -> 文件大小以兆字节为单位
总结
今天的文章介绍了图片压缩的三种用法,分别对应三个不同的库,大家可以去实践,来对比一下那个库的性能更好。
好的,我是坚果,有更多精彩内容,期待你的发现.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)