generateThumbnail static method
Future<ImageResult<Uint8List> >
generateThumbnail(
- dynamic source, {
- int maxWidth = 150,
- int maxHeight = 150,
- int quality = 80,
- ThumbnailFormat format = ThumbnailFormat.jpeg,
- String? cacheDir,
生成缩略图
source 图片来源,支持:
String:本地文件路径或网络 URL(以http://或https://开头)Uint8List:原始字节数据
maxWidth 最大宽度(像素),默认 150
maxHeight 最大高度(像素),默认 150
quality JPEG 压缩质量(1-100),默认 80;PNG/WebP 忽略此参数
format 输出格式,默认 ThumbnailFormat.jpeg
cacheDir 自定义缓存目录,默认使用系统临时目录/thumbnails
返回 ImageResult<Uint8List>,data 为缩略图字节数据。
内部实现自动对相同参数生成的缩略图进行缓存(缓存目录内文件名含参数哈希), 缓存命中时跳过解码直接返回。
Implementation
static Future<ImageResult<Uint8List>> generateThumbnail(
dynamic source, {
int maxWidth = 150,
int maxHeight = 150,
int quality = 80,
ThumbnailFormat format = ThumbnailFormat.jpeg,
String? cacheDir,
}) async {
if (maxWidth <= 0 || maxHeight <= 0) {
return const ImageResult.failure('maxWidth 和 maxHeight 必须大于 0');
}
if (source == null) {
return const ImageResult.failure('source 不能为空');
}
try {
// 生成缓存 key,检查缓存
final key = _cacheKey(source, maxWidth, maxHeight, quality, format);
final cachePath = await _getCacheFilePath(key, cacheDir: cacheDir);
final cacheFile = File(cachePath);
if (await _isCacheValid(cacheFile)) {
return ImageResult.success(await cacheFile.readAsBytes());
}
// 获取原始字节
final bytes = await _fetchBytes(source);
// 解码并缩放
final thumbnailBytes = _generateThumbnailBytes(
bytes,
maxWidth,
maxHeight,
quality,
format,
);
// 写入缓存
await cacheFile.writeAsBytes(thumbnailBytes);
return ImageResult.success(thumbnailBytes);
} catch (e) {
return ImageResult.failure(e.toString());
}
}