当我们使用 flutter 处理相机时,我们使用相机插件。
它具有.startImageStream方法,该方法返回CameraImage cameraImage数据类型。

在iOS中,cameraImage.format bgra8888
对于android来说cameraImage.format yuv420

在将这些格式编码为JPEG或PNG之前,我们需要进行一些字节操作,并将每个字节放入图像缓冲区,然后在JpegEncoder中使用它。

对于android,在此问题中讨论并实现了cameraImage(yuv420) to List<int>:https://github.com/flutter/flutter/issues/26348#issuecomment-462321428

问题是,如何从 bgra8888 cameraImage构造抖动 Image(jpeg | png)

最佳答案

看看https://pub.dev/packages/image上的pub.dev图像库API。它可以从任何图像格式转换,无论是bgra8888还是yuv420。本示例将其转换为PNG文件:

import 'dart:io';
import 'package:image/image.dart';
void main() {
  // Read an image from file
  // decodeImage will identify the format of the image and use the appropriate
  // decoder.
  Image image = decodeImage(File('test.bgra8888').readAsBytesSync());

  // Resize the image to a 120x? thumbnail (maintaining the aspect ratio).
  Image thumbnail = copyResize(image, width: 120);

  // Save the thumbnail as a PNG.
  File('thumbnail.png').writeAsBytesSync(encodePng(thumbnail));
}

10-01 21:12