写点什么

Flutter 压缩图像的最佳方式

作者:坚果
  • 2022 年 1 月 07 日
  • 本文字数:1438 字

    阅读完需:约 5 分钟

引言

作为开发者的我们,经常会做一些上传图片和和保存图片啦的功能,但是由于一些图片非常大,我们在上传或者保存的时候会占用大量的网络资源和本地资源,那么我们需要做的就是对图片进行压缩。


昨天在写如何接入微信分享的时候用到一个知识点,就是图片压缩

当时我用了 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

安装

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 -> 文件大小以兆字节为单位


总结

今天的文章介绍了图片压缩的三种用法,分别对应三个不同的库,大家可以去实践,来对比一下那个库的性能更好。

好的,我是坚果,公众号有更多精彩内容,期待你的发现.

发布于: 刚刚阅读数: 2
用户头像

坚果

关注

此间若无火炬,我便是唯一的光 2020.10.25 加入

公众号:“坚果前端”,华为云享专家,InfoQ签约作者,51CTO博客首席体验官,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。

评论

发布
暂无评论
Flutter 压缩图像的最佳方式