在Flutter中将图像转换为XFile

sg24os4d  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(732)

无法打开文件,路径= '/data/data/com.example.demo/cache/a.png'(操作系统错误:无此类文件或目录,errno = 2))
我想做我生成的图像转换为XFile。当我尝试,然后我面临这个问题(无法打开文件,路径= '/data/data/com.example.demo/cache/a.png'(操作系统错误:没有这样的文件或目录,errno = 2))。
函数内部代码:

final XFile? pickedImage = await ImagePicker().pickImage(source: source);
if (pickedImage != null) {
  //for convert greyscale
  final Uint8List imgBytes = await File(pickedImage.path).readAsBytes();
  final imgLib.Image? image = imgLib.decodeImage(imgBytes);
  img = imgLib.grayscale(image!);
  print("object img: ${img!.getBytes()}");
  final root = await getTemporaryDirectory();
  final path = "${root.path}/a.png";
  print("object path: $path");
  imageFile = XFile(path,bytes: img!.getBytes());

和UI代码:

image: FileImage(File(imageFile!.path)),
s5a0g9ez

s5a0g9ez1#

你正面临这个错误,因为应用程序是不会搜索所有的文件管理器,以获得不同设备上的图像.所以存储base64字符串在一个变量中,你也可以解码.顺便说一句,你的问题我尽力回答在所有的方式我看到你的代码,我认为你也转换成字节和base64.你可以使用下面的代码.它将从图库中选取图像,然后将其存储为Xfile,然后读取其字节并将字节转换为base 64字符串

//Variables
ImagePicker picker = ImagePicker();
  XFile? image;
  File? f = null;

//picking image from gallery

  

    InkWell(
      onTap: () async {
                image = await picker.pickImage(source: ImageSource.gallery);
                        setState(() {
                          f = File(image!.path);});
                            },
                                  child: Center(
                                    child: f == null?
                                        Image.asset('assets/images/placeholder.png',
                                            width: 194, height: 174)
                                        : ClipRRect( borderRadius:BorderRadius.all(
                                          Radius.circular(10),),
                                        child: Image.file(f!, width: 194,height:174, 
                                        fit: BoxFit.cover,)),
                                  ),
                                ),

//converting now to xfile => byte => base64

                                      if (f != null) {
                                      const FlutterSecureStorage storage =
                                          FlutterSecureStorage();

                                      setState(() {
                                        APIcalling = true;
                                      });

                                      final bytes = f!.readAsBytesSync();
                                      List<int> imageBytes =
                                          await image!.readAsBytes();
                                      final String b64 =
                                          base64Encode(imageBytes);
                                      log(b64);

相关问题