С появлением потока изображений в флаттер-камере версии 0.2.8 я попытался интегрировать его в свой проект для использования вместе с AWS.
Амазону требуется изображение в формате:
- Блок байтов изображения размером до 5 МБ.
- Тип: объект двоичных данных в кодировке Base64
- Ограничения длины: минимальная длина 1. Максимальная длина 5242880.
<Ч />
Ранее я использовал пакет Camera, чтобы сделать снимок, загрузить изображение, а затем преобразовать его в соответствии с требованиями amazon, но использование ImageStream намного больше подходит для того, что я хотел бы сделать. Мой предыдущий подход был:
// Take the picutre
await _cameraController.takePicture(path);
// Load it from my filesystem
File imagefile = new File(path);
// Convert to amazon requirements
List<int> imageBytes = imagefile.readAsBytesSync();
String base64Image = base64Encode(imageBytes);
Однако, используя поток изображений, я не могу найти простой способ конвертировать CameraImage
в формат, который требуется amazon. У меня нет большого опыта с изображениями, поэтому я застрял.
Я попытался манипулировать кодом, используемым в демонстрационной программе firebase ml & camera stream
final int numBytes =
image.planes.fold(0, (count, plane) => count += plane.bytes.length);
final Uint8List allBytes = Uint8List(numBytes);
int nextIndex = 0;
for (int i = 0; i < image.planes.length; i++) {
allBytes.setRange(nextIndex, nextIndex + image.planes[i].bytes.length,
image.planes[i].bytes);
nextIndex += image.planes[i].bytes.length;
}
// Convert as done previously
String base64Image = base64Encode(allBytes);
Однако AWS ответил InvalidImageFormatException
. Если кто-то знает, как правильно кодировать изображение, это было бы здорово! Спасибо