将文件转换为图像

时间:2019-10-03 18:03:42

标签: flutter dart

我使用像文件一样保存的ImagePicker拍照。我要在将其上传到FirebaseStorage之前将其转换为png。问题是当我尝试使用此功能将其转换时:

File('test.png')。writeAsBytesSync(encodePng(image));

它给了我错误,因为照片被保存为“文件而不是图像”。 我已经在Google上搜索了某种类型的插件或函数,以将其从File转换为Image,但没有发现任何具体内容。 有人可以帮我吗?

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

3 个答案:

答案 0 :(得分:3)

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

  1. 通过File.readAsBytes从文件中读取字节。这将为您提供Uint8List(与List<int>兼容)。
  2. 然后,您需要解码这些字节(例如,使用decodeJpg)将其转换为package:image的{​​{1}}类型。
  3. 接下来,您将需要在Image上使用encodePng。这样会给您更多的字节(作为Image)。
  4. 最后,您将需要通过File.writeAsBytes将这些字节写入文件。

所有这些,解码JPEG并将其重新编码为PNG毫无意义;您只是在使图像占用过多的空间。

答案 1 :(得分:1)

使用此功能:

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;
}

它以文件格式拍照,并以 Image 格式返回图像。

在调用函数时不要忘记添加等待

答案 2 :(得分:0)

这是获取文件编码路径的方法。

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