当我们使用 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));
}