gpt4 book ai didi

firebase - flutter 和 Firebase : Compression before upload image

转载 作者:IT老高 更新时间:2023-10-28 12:29:48 25 4
gpt4 key购买 nike

我想将用户在我的应用中选择的照片发送到 Firebase 存储。我有一个简单的类,其属性 _imageFile 设置如下:

File _imageFile;

_getImage() async {
var fileName = await ImagePicker.pickImage();
setState(() {
_imageFile = fileName;
});
}

之后我用这个代码发送照片:

final String rand1 = "${new Random().nextInt(10000)}";
final String rand2 = "${new Random().nextInt(10000)}";
final String rand3 = "${new Random().nextInt(10000)}";
final StorageReference ref = FirebaseStorage.instance.ref().child('${rand1}_${rand2}_${rand3}.jpg');
final StorageUploadTask uploadTask = ref.put(_imageFile);
final Uri downloadUrl = (await uploadTask.future).downloadUrl;
print(downloadUrl);

问题是照片通常非常大。 Flutter/Dart 中是否有任何方法可以在上传前压缩和调整照片大小?我可以接受质量损失。

最佳答案

2020 年 6 月 5 日 - 更新

image_picker插件现在支持 imageQuality 参数。你可以做类似的事情

ImagePicker imagePicker = ImagePicker();
PickedFile compressedImage = await imagePicker.getImage(
source: ImageSource.camera,
imageQuality: 85,
);

旧答案

或者如果您想不使用使用 ImagePicker

压缩图像

我遇到了这个问题,并且能够使用 Dart image package 完成压缩/调整大小连同 path provider .你可以看 Dart image apiexamples寻求其他方式和更多帮助。

这就是我所做的:

import 'package:image/image.dart' as Im;
import 'package:path_provider/path_provider.dart';
import 'dart:math' as Math;

void compressImage() async {
File imageFile = await ImagePicker.pickImage();
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
int rand = new Math.Random().nextInt(10000);

Im.Image image = Im.decodeImage(imageFile.readAsBytesSync());
Im.Image smallerImage = Im.copyResize(image, 500); // choose the size here, it will maintain aspect ratio

var compressedImage = new File('$path/img_$rand.jpg')..writeAsBytesSync(Im.encodeJpg(image, quality: 85));
}

然后我将 compressedImage 上传到 Firebase 存储。您可以使用 quality 属性调整保存 jpg 的质量,在我的例子中,我选择了 85(满分 100)。

希望这会有所帮助!如果您有任何问题,请告诉我。

关于firebase - flutter 和 Firebase : Compression before upload image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com