如何在iOS的flutter中将图像流缓冲区转换为jpeg图像字节?

时间:2019-08-13 13:14:17

标签: image-processing flutter dart camera

当我们使用 flutter 处理相机时,我们使用 Camera 插件。
它具有.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)

1 个答案:

答案 0 :(得分:0)

看看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));
}