Flutter&Firebase:上传图片前的压缩

Kam*_*icz 18 dart firebase flutter firebase-storage

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

File _imageFile;

_getImage() async {
    var fileName = await ImagePicker.pickImage();
    setState(() {
        _imageFile = fileName;
    });
}
Run Code Online (Sandbox Code Playgroud)

之后,我发送照片与此代码:

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);
Run Code Online (Sandbox Code Playgroud)

问题是照片通常非常大.在上传之前,Flutter/Dart中是否有任何压缩和调整照片大小的方法?我很好,质量下降.

Man*_*ans 25

我遇到了这个,并且能够使用Dart 图像包路径提供程序完成压缩/调整大小.您可以查看dart 图像api和其他方法的示例以及更多帮助.

这是我做的:

File compressedImage = await ImagePicker.pickImage(source: ImageSource.camera, imageQuality: 85);
Run Code Online (Sandbox Code Playgroud)

然后我上传imageQuality到firebase存储.您可以使用quality属性调整jpg保存的质量,在我的情况下,我选择85(满分100).

希望这可以帮助!如果您有任何疑问,请告诉我.

  • 是的,它很长,我无法理解为什么它冻结我的用户界面,即使代码是异步的 (2认同)

Col*_*son 8

image_picker插件是目前非常简单.可以直接添加用于指定所选图像的所需大小/质量的选项.如果您这样做,请发送拉货请求!

  • 在图像选择器库中传递什么参数?你能提供链接吗 (3认同)
  • 语法:ImagePicker.pickImage(source.ImageSource.gallery, imageQuality: 85); 但这会将图像压缩为当前质量的 85%,因此,如果图像质量本来就较低,那么它只会变得更加混乱!替代解决方案:ImagePicker.pickImage(source.ImageSource.gallery, maxHeight: 200); 仅当图像大于提到的高度时,使用 maxHeight 才会压缩图像! (3认同)

Kab*_*uda 8

有很多解决方案:

使用image_picker包:

您可以使用ImagePickerimageQuality的内置属性来压缩图像。该属性采用和之间的值,表示原始图像质量的百分比。0100

首先,将其添加image_picker为 pubspec.yaml 文件中的依赖项。

用法

  File _image;

  Future getImage() async {
    var image = await ImagePicker.pickImage(
        source: ImageSource.gallery,  
                imageQuality: 25,
    );

    setState(() {
      _image = image;
    });
  }
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是它嵌入在 image_picker 包中,因此非常易于使用。

您还可以从图像小部件调整质量。

用于filterQuality 设置FilterQuality图像的大小。

例子 :

Image.asset('assets/kab1.png', filterQuality: FilterQuality.high,), 
Run Code Online (Sandbox Code Playgroud)

这些属性存在于AssetImageNetworkImageFileImageMemoryImage

您还可以简单地调整图像大小(调整图像大小可以压缩它)。为此,请尝试ResizeImage小部件

另一种解决方案是使用flutter_image_compress


cha*_*man 5

使用image_picker插件并调用选择图像函数作为

Future<File> imageFile = ImagePicker.pickImage(source: ImageSource.gallery , maxHeight: 200 , maxWidth: 200 );

将 maxHeight 和 maxWidth 更改为您需要的任何图像大小。

  • 这对我有用!我用 400 而不是 200 来获得更好的质量。一般200x200小于20kb,400x400小于40kb (2认同)
  • 2020:“pickImage”已弃用,不应使用。使用 imagePicker.getImage() 方法代替.. (2认同)