将文件转换为图像

i6x*_*x86 5 dart flutter

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

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

它给了我错误,因为照片是像文件而不是图像一样保存的。我在谷歌上搜索了某种类型的插件或函数来将其从文件转换为图像,但没有找到具体的信息。有人可以帮我解决这个问题吗?

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

Utt*_*ila 5

使用这个函数:

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;
}
Run Code Online (Sandbox Code Playgroud)

它以文件格式拍摄照片并以图像格式返回图像。

调用函数时不要忘记添加await 。


jam*_*lin 4

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

  1. 通过从文件中读取字节File.readAsBytes。这将为您提供一个Uint8List(与 兼容List<int>)。
  2. 然后,您将需要解码这些字节(例如使用decodeJpg)以将它们转换为package:imageImage类型。
  3. 接下来您将需要encodePngImage. 这将为您提供更多字节(作为List<int>)。
  4. 最后,您需要通过将这些字节写入文件File.writeAsBytes

话虽如此,解码 JPEG 并将其重新编码为 PNG 是毫无意义的;你只是让图像占用了比它需要的更多的空间。