Flutter 調(diào)用相機/相冊,多圖選擇霎挟,圖片視頻文件壓縮上傳處理

需要配置的插件:

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 上傳 服務(wù)器 柬焕,實用類

****

**/

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<Asset> resultList = List<Asset>();

? ? 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<FormData> _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<List> _saveImages(List<Asset> images) async {

? ? List fileList = List();

? ? for (int i = 0; i < images.length; i++) {

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

? ? ? String name = DateTime.now().millisecondsSinceEpoch.toString() + ".jpg";

? ? ? List<int> 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);

? }

}


復(fù)制上述代碼:調(diào)用即可搅轿,相冊選取的視頻壓縮,有待完善富玷,后期會更新...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載璧坟,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者没宾。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沸柔,隨后出現(xiàn)的幾起案子循衰,更是在濱河造成了極大的恐慌,老刑警劉巖褐澎,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会钝,死亡現(xiàn)場離奇詭異,居然都是意外死亡工三,警方通過查閱死者的電腦和手機迁酸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俭正,“玉大人奸鬓,你說我怎么就攤上這事〉Ф粒” “怎么了串远?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長儿惫。 經(jīng)常有香客問我澡罚,道長,這世上最難降的妖魔是什么肾请? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任留搔,我火速辦了婚禮,結(jié)果婚禮上铛铁,老公的妹妹穿的比我還像新娘隔显。我一直安慰自己,他們只是感情好饵逐,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布括眠。 她就那樣靜靜地躺著,像睡著了一般梳毙。 火紅的嫁衣襯著肌膚如雪哺窄。 梳的紋絲不亂的頭發(fā)上捐下,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天账锹,我揣著相機與錄音,去河邊找鬼坷襟。 笑死奸柬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的婴程。 我是一名探鬼主播廓奕,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桌粉?” 一聲冷哼從身側(cè)響起蒸绩,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铃肯,沒想到半個月后患亿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡押逼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年步藕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挑格。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咙冗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漂彤,到底是詐尸還是另有隱情雾消,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布挫望,位于F島的核電站仪或,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏士骤。R本人自食惡果不足惜范删,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拷肌。 院中可真熱鬧到旦,春花似錦、人聲如沸巨缘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽若锁。三九已至搁骑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間又固,已是汗流浹背仲器。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仰冠,地道東北人乏冀。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像洋只,于是被迫代替她去往敵國和親辆沦。 傳聞我的和親對象是個殘疾皇子昼捍,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354