flutter如何从uint8list计算下载图片的宽高
在Flutter中,我得到了一个图片的uint8list数据,但不知道如何从中计算出图片的实际宽高?有没有直接解析的方法,而不需要先保存为文件或显示到屏幕上?
2 回复
使用Flutter的Image.memory方法加载Uint8List,通过Image组件的image属性获取ImageInfo,然后从ImageInfo中读取宽高信息。
更多关于flutter如何从uint8list计算下载图片的宽高的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,可以通过以下方法从 Uint8List 计算下载图片的宽高:
方法1:使用 Image.memory 的 ImageStreamListener
import 'package:flutter/material.dart';
import 'dart:typed_data';
void getImageDimensions(Uint8List imageData) async {
final ImageStream stream = Image.memory(imageData).image.resolve(ImageConfiguration.empty);
stream.addListener(ImageStreamListener((ImageInfo info, bool _) {
int width = info.image.width;
int height = info.image.height;
print('图片尺寸: $width x $height');
// 在这里使用宽高数据
}));
}
方法2:使用 Image.memory 配合 Completer
import 'dart:typed_data';
import 'package:flutter/material.dart';
Future<Size> getImageSize(Uint8List bytes) async {
final Completer<Size> completer = Completer();
final Image image = Image.memory(bytes);
image.image.resolve(ImageConfiguration.empty).addListener(
ImageStreamListener((ImageInfo info, bool _) {
completer.complete(Size(
info.image.width.toDouble(),
info.image.height.toDouble()
));
})
);
return completer.future;
}
// 使用示例
Uint8List imageData = ... // 你的图片数据
Size size = await getImageSize(imageData);
print('宽: ${size.width}, 高: ${size.height}');
方法3:使用 image 包(推荐用于本地处理)
首先添加依赖:
dependencies:
image: ^3.0.2
代码实现:
import 'dart:typed_data';
import 'package:image/image.dart' as img;
Size getImageDimensions(Uint8List bytes) {
final image = img.decodeImage(bytes);
if (image != null) {
return Size(image.width.toDouble(), image.height.toDouble());
}
throw Exception('无法解析图片数据');
}
// 使用
try {
Size dimensions = getImageDimensions(imageData);
print('宽: ${dimensions.width}, 高: ${dimensions.height}');
} catch (e) {
print('错误: $e');
}
推荐方案
- 网络图片:使用方法1或2
- 本地图片处理:使用方法3(
image包性能更好) - 注意:方法1和2需要Widget树构建完成,方法3可直接在任意地方使用
选择哪种方法取决于你的具体使用场景和性能需求。

