flutter - 使用颤振从视频创建缩略图时图像无效
问题描述
尝试从视频生成缩略图图像,文件已创建,但错误为 Invalid image on load 。使用此包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(bytes)
而不是writeAsBytes(buffer.asUint8List())
. 不需要任何buffer
.
推荐阅读
- ruby-on-rails - 如何使用 RSpec 测试脚本?
- javascript - 如何有条件地使用 JSON 数据生成动态角度形式
- javascript - 遍历 JSON 数据并将字段文本附加到 div (ES6)
- firebase - 使用 Admin SDK 删除时如何将项目计数器保留在集合中
- python - 如何执行存储为具有特定参数的字典值的函数?
- rust - 如何在泛型中指定迭代器类型?
- java - 如何从 jar 文件运行 Maven Failsafe 集成测试?
- servicenow - 是否可以在 Servicenow 中配置多个选项列表?
- autodesk-forge - 针对 beta 服务器创建场景定义时出现 422 错误
- puppeteer - 如何在 Puppeteer 中拦截服务器发送的事件消息