我使用像文件一样保存的ImagePicker拍照。我要在将其上传到FirebaseStorage之前将其转换为png。问题是当我尝试使用此功能将其转换时:
File('test.png')。writeAsBytesSync(encodePng(image));
它给了我错误,因为照片被保存为“文件而不是图像”。 我已经在Google上搜索了某种类型的插件或函数,以将其从File转换为Image,但没有发现任何具体内容。 有人可以帮我吗?
编辑:为了确保我清楚地解释了这一点:我有像文件一样存储的照片'photo 1.jpeg',因为这是ImagePicker所做的。然后我要将此文件转换为图像,然后将其转换为.png
答案 0 :(得分:3)
如果要将图像重新编码为PNG,则需要:
File.readAsBytes
从文件中读取字节。这将为您提供Uint8List
(与List<int>
兼容)。decodeJpg
)将其转换为package:image
的{{1}}类型。Image
上使用encodePng
。这样会给您更多的字节(作为Image
)。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());