我想将用户在我的应用中选择的照片发送到 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 中是否有任何方法可以在上传前压缩和调整照片大小?我可以接受质量损失。
最佳答案
image_picker插件现在支持 imageQuality
参数。你可以做类似的事情
ImagePicker imagePicker = ImagePicker();
PickedFile compressedImage = await imagePicker.getImage(
source: ImageSource.camera,
imageQuality: 85,
);
ImagePicker
我遇到了这个问题,并且能够使用 Dart image package 完成压缩/调整大小连同 path provider .你可以看 Dart image api和 examples寻求其他方式和更多帮助。
这就是我所做的:
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/
相关文章:
flutter - 如何检查滚动位置是在 ListView 的顶部还是底部?
dart - 如何在 ListView 内 flutter 中创建一行可滚动的文本框或小部件?
android - 如何在单击推送通知时打开特定屏幕以进行 flutter
dart - Flutter:是否有可能创建 App Widgets (Android) 和 Tod
mobile - 是否可以在 Linux 虚拟机上使用 Flutter 开发 iOS 应用程序?
flutter - 如何为 flutter 添加自定义颜色?
Flutter - 如何更改 TextField 提示颜色?