前言:

在android原生中比较常用的是luban压缩,当然,flutter版本也有luban压缩,
通过一些资料搜索,luban压缩是直接通过dart进行压缩的,在针对一些大图片,动不动就12-20m的图片,在部分旧手机的会直接出现闪退的情况。

当然,上面说得可能也不一定正确,下面我自己使用的是pub上比较popular的插件:flutter_image_compress: ^0.7.0

使用方式:

  1. pubspec.yaml 添加依赖,如下:
    2.

  2. 使用命令:pub packages get

  3. 在上传的地方使用代码:

    Utils.showLoading(context, text: '正在压缩上传中,请耐心等待....');
    for (File item in assets) {
      final Directory _temp = await getTemporaryDirectory();
      final String _path = _temp.path;
      var path = item.path;
      var name = path.substring(path.lastIndexOf("/") + 1, path.length);
      FlutterImageCompress.compressAndGetFile(
        path, '$_path/img_$name.jpg',
        quality: 88,
        // format: format
      ).then((value) {
        uploads.add(value);
        upload(value);
      });
    }

更多压缩方式如下:

  // 1. compress file and get 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;
  }

  // 2. compress file and get 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;
  }

  // 3. compress asset and get Uint8List.
  Future<Uint8List> testCompressAsset(String assetName) async {
    var list = await FlutterImageCompress.compressAssetImage(
      assetName,
      minHeight: 1920,
      minWidth: 1080,
      quality: 96,
      rotate: 180,
    );

    return list;
  }

  // 4. compress Uint8List and get another 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;
  }

更多:

如何写一个自己的小程序并上线

Github搭建个人博客(2019最新版,亲测)

关注下面公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。

在微信后台回复「130个小程序」,即可免费领取享有导入就能跑的微信小程序
在这里插入图片描述

qq加油小程序
徐代龙的技术博客

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐