Flutter使用MemoryImage显示image包Image时报Invalid image data异常
异常原因
Exception: Invalid image data 异常的核心触发原因是:你传入MemoryImage的是ToolsImage.Image对象存储的原始未编码像素矩阵数据,这类数据没有PNG/JPG等标准图片格式的文件头、编码结构,不属于Flutter框架可识别的合法图片字节流,解析时自然会抛出数据无效的错误。
package:image 库中通过copyResize()、像素操作方法处理得到的Image对象,其data字段仅保存每个像素的RGBA值,和磁盘上存储的、可直接被图片组件解析的压缩编码图片文件不是同一种数据格式。
修复方案
- 完成图片缩放、像素修改操作后,先调用库内置的编码方法,把原始像素数据编码为标准图片格式的字节流,以常用的PNG格式为例:
import 'package:image/image.dart' as ToolsImage; // 你的图片处理逻辑,比如缩放 ToolsImage.Image processedImage = ToolsImage.copyResize(sourceImage, width: 300); // 将处理后的原始像素编码为PNG格式的合法字节流 Uint8List imageBytes = Uint8List.fromList(ToolsImage.encodePng(processedImage));
- 将编码完成的标准格式字节流传入
MemoryImage即可正常加载,不要直接读取image.data.buffer的原始像素数据:
Container( child: Image( image: MemoryImage(imageBytes), ) )
补充说明:如果需要输出JPG格式,把
encodePng替换为encodeJpg即可,注意JPG格式不支持透明通道,编码时可传入quality参数设置压缩质量。
内容的提问来源于stack exchange,提问作者kosiara - Bartosz Kosarzycki
相关产品推荐
相关产品推荐

