在尝试使用flutter image_picker软件包将图像上传到存储设备之前,先对其进行压缩。 我找到了三种方法来做,但是我不确定哪种方法是最好的。
这些选项之间有什么区别吗?
感谢任何帮助和解释。
答案 0 :(得分:6)
这里是潜在解决方案的细分。 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;
});
}
我做了一点测试,看看有多少不同的值会影响图像的大小:
总而言之,您可以将图像的文件大小减小一半以上,而不会造成太大的可见差异。试图将图像质量强制为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,
quality: 5,);
return compressedFile;
}
50%的图像质量-1.02MB
25%的图像质量-309KB
5%的图像质量-204KB
我想这种方法的好处之一是您不需要为压缩文件提供输出途径。
答案 1 :(得分:1)
像 Luban for Dart 这样的图像压缩包。该库没有系统平台限制。
答案 2 :(得分:0)
图像选择器
使用图像选择器,您可以轻松有效地设置图像质量,如下所示
File _image;
Future getImage() async {
var image = await ImagePicker.pickImage(
source: ImageSource.camera, imageQuality: 50);
setState(() {
_image = image;
});
}
图像质量以百分比%100为最高