问题描述
尝试从视频生成缩略图图像,文件已创建,但加载时错误为无效图像。使用此包 video_thumbnail
创建缩略图,
Future<File> genThumbnail(url) async {
//WidgetsFlutterBinding.ensureInitialized();
Uint8List bytes;
final Completer<ThumbnailResult> completer = Completer();
bytes = await VideoThumbnail.thumbnailData(
video: url,imageFormat: ImageFormat.JPEG,maxHeight: 250,maxWidth: 300,timeMs: 0,quality: 0);
int _imageDataSize = bytes.length;
print("image size: $_imageDataSize");
//final _image = Image.memory(bytes);
//var _file =File.fromrawPath(bytes);
Directory tempDir = await getTemporaryDirectory();
var uint8list = bytes;
var buffer = uint8list.buffer;
ByteData byteData = ByteData.view(buffer);
File file = await File('${tempDir.path}/img/THUMBNAIL${DateTime.Now().toIso8601String()}.JPEG').writeAsBytes(
buffer.asUint8List(byteData.offsetInBytes,byteData.lengthInBytes));
return file;
}
保存到 firestore
await genThumbnail(fileurl).then((_thumbFIle) async{
String Thumbfileurl = await uploadFile(_thumbFIle,'thumbnailOf${filenamewithoutExtension}.JPEG','videothumbnail');
await sendFiletoFirestoreChat(fileType,fileurl,filenamewithoutExtension,Thumbfileurl);
return fileurl;
});
解决方法
将此作为社区 Wiki 发布,因为它基于 @pskink 评论。
要解决,请添加 writeAsBytes(buffer.asUint8List())
而不是 buffer
。不需要任何 .edmx
。