颤抖压缩图像的最佳方法

在尝试使用flutter image_picker软件包将图像上传到存储设备之前,先对其进行压缩。 我找到了三种方法来做,但是我不确定哪种方法是最好的。

  1. 使用image_picker包的imageQuality参数

image_picker

  1. 使用flutter_image_compress包

flutter_image_compress

  1. 使用flutter_native_image包

flutter_native_image

这些选项之间有什么区别吗?

感谢任何帮助和解释。

kingxuyao 回答:颤抖压缩图像的最佳方法

这里是潜在解决方案的细分。 TLDR的意思是flutter_image_compress包比ImagePicker类本身可以压缩文件更多。

图像选择器

正如其他人所建议的那样,您可以使用ImagePicker内置的imaqeQuality属性来压缩图像。此属性的值介于0到100之间,代表原始图像质量的百分比。这种方法的好处是它内置在image_picker包中,因此非常易于使用。

  File _image;

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

    setState(() {
      _image = image;
    });
  }

我做了一点测试,看看有多少不同的值会影响图像的大小:

100%图像质量-4.58MB enter image description here

50%的图像质量-3.58MB enter image description here

25%的图像质量-2.61MB enter image description here

1%的图像质量-2.12MB enter image description here

0%的图像质量-3.9MB enter image description here

总而言之,您可以将图像的文件大小减小一半以上,而不会造成太大的可见差异。试图将图像质量强制为0%实际上并不会缩小文件大小。

flutter_image_compress
flutter_image_compress软件包使用起来非常简单,实际上在减小文件大小方面要好得多。

Future<File> compressFile(File file) async {
  final filePath = file.absolute.path;

  // Create output file path
  // eg:- "Volume/VM/abcd_out.jpeg"
  final lastIndex = filePath.lastIndexOf(new RegExp(r'.jp'));
  final splitted = filePath.substring(0,(lastIndex));
  final outPath = "${splitted}_out${filePath.substring(lastIndex)}";
  var result = await FlutterImageCompress.compressAndGetFile(
    file.absolute.path,outPath,quality: 5,);

  print(file.lengthSync());
  print(result.lengthSync());

  return result;
 }

在这里我将省略图像,因为它们看起来都一样:
50%的图像质量-590KB
25%的图像质量-276KB
5%的图像质量-211KB

flutter_native_image 就文件大小而言,flutter_native_image软件包与flutter_image_compress软件包相当。

Future<File> compressFile(File file) async{
    File compressedFile = await FlutterNativeImage.compressImage(file.path,);
    return compressedFile;
  }

50%的图像质量-1.02MB
25%的图像质量-309KB
5%的图像质量-204KB

我想这种方法的好处之一是您不需要为压缩文件提供输出途径。

,

像 Luban for Dart 这样的图像压缩包。该库没有系统平台限制。

plugin

,

图像选择器

使用图像选择器,您可以轻松有效地设置图像质量,如下所示

File _image;

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

    setState(() {
      _image = image;
    });
  }

图像质量以百分比%100为最高

本文链接:https://www.f2er.com/3124489.html

大家都在问