Flutter 将文件转换为图像

Flutter 将文件转换为图像,flutter,dart,Flutter,Dart,我使用ImagePicker拍摄了一张像文件一样保存的照片。我想要的是在上传到FirebaseStorage之前将其转换为png。问题是,当我尝试使用此函数转换它时: Future<Image> convertFileToImage(File picture) async { List<int> imageBase64 = picture.readAsBytesSync(); String imageAsString = base64Encode(imageBas

我使用ImagePicker拍摄了一张像文件一样保存的照片。我想要的是在上传到FirebaseStorage之前将其转换为png。问题是,当我尝试使用此函数转换它时:

Future<Image> convertFileToImage(File picture) async {
  List<int> imageBase64 = picture.readAsBytesSync();
  String imageAsString = base64Encode(imageBase64);
  Uint8List uint8list = base64.decode(imageAsString);
  Image image = Image.memory(uint8list);
  return image;
}
文件'test.png'。writeAsBytesSyncencodePngimage

它给了我错误,因为照片是像文件而不是图像一样保存的。 我在谷歌上搜索了一些插件或函数,将其从文件转换为图像,但没有找到具体的内容。 有人能帮我吗


编辑:只是为了确保我解释清楚:我有照片'photo 1.jpeg',它像文件一样存储,因为这是ImagePicker所做的。然后我想将此文件转换为图像,然后将其转换为.png

以下是如何获得文件的编码路径

File file = File('test.png);
String encodedImagePath = base64Encode(await file.readAsBytes());

下面是如何获取文件的编码路径

File file = File('test.png);
String encodedImagePath = base64Encode(await file.readAsBytes());

如果要将图像重新编码为PNG,则需要:

通过读取文件中的字节。这将为您提供一个与列表兼容的UINT8列表。 然后,您需要对这些字节进行解码,例如,使用将其转换为package:image的图像类型。 接下来,您需要在图像上使用encodePng。这将为您提供更多的字节作为列表。 最后,您需要通过将这些字节写入文件。
尽管如此,对JPEG进行解码并将其重新编码为PNG是毫无意义的;您只是使图像占用的空间超出了需要。

如果要将图像重新编码为PNG,您需要:

通过读取文件中的字节。这将为您提供一个与列表兼容的UINT8列表。 然后,您需要对这些字节进行解码,例如,使用将其转换为package:image的图像类型。 接下来,您需要在图像上使用encodePng。这将为您提供更多的字节作为列表。 最后,您需要通过将这些字节写入文件。 尽管如此,对JPEG进行解码并将其重新编码为PNG是毫无意义的;您只是使图像占用的空间超过了它所需的空间。

使用此功能:

Future<Image> convertFileToImage(File picture) async {
  List<int> imageBase64 = picture.readAsBytesSync();
  String imageAsString = base64Encode(imageBase64);
  Uint8List uint8list = base64.decode(imageAsString);
  Image image = Image.memory(uint8list);
  return image;
}
它以文件格式拍摄照片,并以图像格式返回图像

调用函数时不要忘记添加wait

使用此功能:

Future<Image> convertFileToImage(File picture) async {
  List<int> imageBase64 = picture.readAsBytesSync();
  String imageAsString = base64Encode(imageBase64);
  Uint8List uint8list = base64.decode(imageAsString);
  Image image = Image.memory(uint8list);
  return image;
}
它以文件格式拍摄照片,并以图像格式返回图像

调用函数时不要忘记添加wait


你能更具体一点吗?要将encodedImagePath转换为图像,我必须做什么?为了确保我清楚地解释了它:我有像文件一样存储的照片“photo 1.jpeg”,因为这是ImagePicker所做的。然后我想把这个文件转换成图像,然后再转换成.png你能更具体一点吗?要将encodedImagePath转换为图像,我必须做什么?为了确保我清楚地解释了它:我有像文件一样存储的照片“photo 1.jpeg”,因为这是ImagePicker所做的。然后我想把这个文件转换成图像,然后再转换成.pngWhat是encodePng,它来自哪里?如果它需要字节数据,你需要先使用File.readAsBytes。它来自这个包什么是encodePng,它来自哪里?如果它需要字节数据,则需要首先使用File.readAsBytes。它来自此包