我使用SQLite在本地存储数据。将图像作为字符串插入,并让它们在这里显示发生_Exception (异常:无效图像数据)的错误。
编码图像代码:
final image = await ImagePicker().pickImage(source: source);
if (image == null) return;
final imagePermanent = File(image.path);
setState(() => _image = imagePermanent);
imageData = base64Encode(_image!.readAsBytesSync());
print(imageData);
return imageData;}显示页中的解码图像:
showImage(String image) {
return Image.memory(base64Decode (image) );
}以代码显示:
showImage(widget.euser.image.toString()),错误显示:
Exception has occurred._Exception (Exception: **Invalid image data**)控制台日志显示如下所示:
E/FlutterJNI(30407): Failed to decode image
E/FlutterJNI(30407): android.graphics.ImageDecoder$DecodeException:
Failed to create image decoder with message 'unimplemented'Input contained an error.
E/FlutterJNI(30407):
at android.graphics.ImageDecoder.nCreate(Native Method)
E/FlutterJNI(30407):
at android.graphics.ImageDecoder.access$200(ImageDecoder.java:173)
E/FlutterJNI(30407):
at android.graphics.ImageDecoder$ByteBufferSource.createImageDecoder(ImageDecoder.java:250)
E/FlutterJNI(30407):
at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1862)
E/FlutterJNI(30407):
at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1855)
E/FlutterJNI(30407):
at io.flutter.embedding.engine.FlutterJNI.decodeImage(FlutterJNI.java:514)错误图像:
发布于 2022-05-10 04:25:44
我强烈建议您不要使用SQlite保存映像,因为它不是为存储如此长的字符串而创建的(它不像以前那样健壮,设计用于存储小值)。虽然如果要在应用程序中存储图像,可以使用以下代码将其存储在外部存储的数据目录中
/storage/emulated/0/Android/data/com.example.yourflutterapp/files/imagepermanat.png您可以使用以下函数:
Future<File?> captureAndSaveImage() async {
final pickedImage = await ImagePicker().getImage(source:
ImageSource.camera);
if (pickedImage == null) return null;
try {
final directory = await getExternalStorageDirectory();
if (directory != null) return
File(pickedImage.path).copy('${directory.path}/name.png');
} catch (e) {
return null;
}
}此函数可称为:
File? file = await captureAndSaveImage();您仍然可以使用SQlite存储您保存的图像的路径()
此外,如果将转换为网络映像,在代码中进一步使用 cachedImageNetwork 包即可。
https://stackoverflow.com/questions/72180594
复制相似问题