我试图获取以 MB 为单位的图像大小,但当在手机图库中查看大小时,打印结果小于实际结果,为什么?
例如,从 flutter 上传的图像大小为 5MB,打印时为 2.4MB
这是我的代码:
pickerFile = await ImagePicker().pickImage(
source: ImageSource.gallery,
);
int fileSizeInBytes = await pickerFile!.length();
double fileSizeInKB = fileSizeInBytes / 1024;
double fileSizeInMB = fileSizeInKB / 1024;
由于压缩、元数据或图像在屏幕上呈现的方式等多种因素,手机图库中显示的大小可能与以编程方式计算的大小不同。
您可以尝试以下方法
请尝试使用 imageQuality: 50 这样
ImagePicker().pickImage(
来源:ImageSource.gallery,
图像质量:50, // 根据您的需要调整它
);
你也可以这样定义
var maxFileSizeInBytes = 2 * 1048576; // 2MB
X文件? pickFile = 等待 ImagePicker().pickImage( 来源:ImageSource.gallery, );
var imagePath =等待pickFile!.readAsBytes();
var 文件大小 = imagePath.length; // 获取文件大小(以字节为单位)
if(文件大小<= maxFileSizeInBytes) {
// File is the right size, upload/use it
}其他{
// File is too large, ask user to upload a smaller file, or compress the file/image
} }
您可以使用这个包并尝试图像:^4.1.7
请使用 readasbytes 检查文件长度,如下所示:
最终字节= image.readAsBytesSync().lengthInBytes;
最终 kb = 字节 / 1024;
最终MB = kb / 1024;
希望您能从上述步骤之一找到答案。