【问题标题】:Convert File to Image将文件转换为图像
【发布时间】:2023-03-23 16:02:01
【问题描述】:

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

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

它给了我错误,因为照片像文件而不是图像一样保存。 我已经搜索了某种类型的插件或函数来将其从文件转换为图像,但没有发现任何具体的内容。 谁能帮帮我,好吗?

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

【问题讨论】:

  • 什么是encodePng,它来自哪里?如果需要字节数据,则需要先使用File.readAsBytes()
  • 来自这个包pub.dev/packages/image

标签: flutter dart


【解决方案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;
}

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 你能说得更具体些吗?我必须对encodedImagePath 做什么才能将其转换为Image?
      • 只是为了确保我解释清楚:我有像文件一样存储的照片“照片 1.jpeg”,因为这是 ImagePicker 所做的。然后我想将此文件转换为图像,然后将其转换为 .png
      猜你喜欢
      • 2014-10-08
      • 2013-08-13
      • 2010-11-22
      • 2011-11-04
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多