热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter调用相机/相册,多图选择,图片视频文件压缩上传处理

需要配置的插件:image_picker:^0.6.7+4multi_image_picker:^4.6.1flutte

需要配置的插件:

image_picker: ^0.6.7+4

multi_image_picker: ^4.6.1

flutter_image_compress: ^0.7.0

flutter_video_compress: ^0.3.7+8

代码片段:

/**

****

    PhotoVideo –> 图片视频 获取 压缩 formdata 上传 服务器 ,实用类

****

**/

class PhotoVideo {

/*拍照*/

  // ignore: override_on_non_overriding_member

  static _takePhoto() async {

    // ignore: deprecated_member_use

    File image = await ImagePicker.pickImage(source: ImageSource.camera);

    Navigator.pop(Router.navigatorState.currentState.context);

    _saveImage(image).then((value) => {

          /*   

          post 上传 block 传值一系列操作   

          */

        });

  }

/*相册 单图选择*/

  // ignore: unused_element

  static _openGallerySingle() async {

    // ignore: deprecated_member_use

    var image = await ImagePicker.pickImage(source: ImageSource.gallery);

    print(‘相册图片–>$image’);

    _saveImage(image).then((value) => {

          /*   

          post 上传 block 传值一系列操作   

          */

        });

    Navigator.pop(Router.navigatorState.currentState.context);

  }

  /*相册 多图选择*/

  static _openGallery() async {

    List resultList = List();

    try {

      resultList = await MultiImagePicker.pickImages(

        maxImages: 9,

        // 是否支持拍照

        enableCamera: true,

        materialOptions: MaterialOptions(

            // 显示所有照片, false时显示相册

            startInAllView: true,

            allViewTitle: ‘所有照片’,

            actionBarColor: ‘#1ba593’,

            textOnNothingSelected: ‘没有选择照片’,

            selectionLimitReachedText: ‘图片选择超出限制,最多选择9张’),

      );

    } catch (e) {

      print(e);

    }

    if (resultList.length > 0) {

      _saveImages(resultList).then((value) => {

            /*   

            post 上传 block 传值一系列操作   

            */

          });

    }

    Navigator.pop(Router.navigatorState.currentState.context);

  }

  /* 单图片压缩 与 flie存图*/

  static Future _saveImage(File file) async {

    File imageFile = await FlutterImageCompress.compressAndGetFile(

      file.absolute.path,

      Directory.systemTemp.path +

          ‘/userava’ +

          DateTime.now().millisecondsSinceEpoch.toString() +

          ‘.jpg’,

      quality: 50,

    );

    print(‘压缩后图片文件大小:’ + imageFile.lengthSync().toString());

    FormData formData = FormData.fromMap({

      ‘file’: await MultipartFile.fromFile(imageFile.path,

          filename: imageFile.path.substring(

              imageFile.path.lastIndexOf(“/”) + 1, imageFile.path.length))

    });

    return formData;

  }

  /*  多图片压缩 与 flie存图*/

  static Future _saveImages(List images) async {

    List fileList = List();

    for (int i = 0; i

      ByteData byteData = await images[i].getByteData(quality: 60);

      String name = DateTime.now().millisecondsSinceEpoch.toString() + “.jpg”;

      List imageData = byteData.buffer.asUint8List();

      MultipartFile multipartFile = MultipartFile.fromBytes(

        imageData,

        // 文件名

        filename: name,

        // // 文件类型

        // contentType: MediaType(“image”, “jpg”),

      );

      FormData formData = FormData.fromMap({‘file’: multipartFile});

      if (multipartFile != null) {

        fileList.add(formData);

      }

    }

    return fileList;

  }

  //视频压缩 初始化

  static final _flutterVideoCompress = FlutterVideoCompress();

  /*拍摄视频*/

  // ignore: unused_element

  static _getVideo() async {

    // ignore: deprecated_member_use

    var image = await ImagePicker.pickVideo(

        maxDuration: Duration(seconds: 10), source: ImageSource.camera);

    print(‘视频文件大小:’ + image.lengthSync().toString());

    Navigator.pop(Router.navigatorState.currentState.context);

    /* 视频的压缩上传 */

    _upLoadVideo(image);

  }

  /* 视频的压缩上传 */

  static _upLoadVideo(image) async {

    await _flutterVideoCompress

        .compressVideo(

          image.path,

          quality: VideoQuality.LowQuality, //  默认VideoQuality.DefaultQuality

          deleteOrigin: false, // 默认(false)

        )

        .then((value) async => {

              print(‘压缩后视频文件大小:’ + value.toJson().toString()),

              /*   

              post 上传 block 传值一系列操作   

              */

            });

  }

  /*选取视频*/

  // ignore: unused_element

  static _takeVideo() async {

    // ignore: deprecated_member_use

    var image = await ImagePicker.pickVideo(

        source: ImageSource.gallery, preferredCameraDevice: CameraDevice.front);

    print(‘相册选取的视频文件:$image’);

    /*

      暂时没有更好的办法,先原文件上传

    */

    Navigator.pop(Router.navigatorState.currentState.context);

  }

}

复制上述代码:调用即可,相册选取的视频压缩,有待完善,后期会更新…


推荐阅读
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在《数字图像处理及应用(MATLAB)第4章》中,详细探讨了“逢七必过”游戏规则的实现方法,并结合数字图像处理技术进行了深入分析。本章通过丰富的实例和代码示例,展示了如何利用MATLAB实现这一游戏规则,并介绍了数字图像处理的基本原理和技术应用。内容涵盖了图像增强、滤波、边缘检测等多个方面,为读者提供了全面的技术支持和实践指导。 ... [详细]
author-avatar
渊博的大盗zhang_618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有