【问题标题】:How to convert image stream buffer into jpeg image bytes in flutter for iOS?如何在 iOS 的 Flutter 中将图像流缓冲区转换为 jpeg 图像字节?
【发布时间】:2019-08-13 13:14:17
【问题描述】:

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

在 iOS 中,cameraImage.formatbgra8888
对于 android cameraImage.formatyuv420

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

对于android,本期讨论并实现cameraImage(yuv420) to List<int>https://github.com/flutter/flutter/issues/26348#issuecomment-462321428

问题是,我们如何从bgra8888cameraImage构造flutter Image(jpeg|png)

【问题讨论】:

  • 你能给我一个样本 bgra8888 缓冲区数据以便我测试吗?
  • 我不知道 bgra8888,但在我的一个应用程序中,我使用了 multi_image_picker 包,它从 iOS 照片应用程序和相机(如指定)中选择图像。然后您可以根据需要将其转换为字节或 List。示例代码:ByteData byteData = await asset.requestOriginal(); List<int> imageData = byteData.buffer.asUint8List();here 是示例实现。

标签: image-processing flutter dart camera


【解决方案1】:

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

【讨论】:

  • 操作请求转换为 JPG,而不是 PNG
  • jpg图片的任何解决方案??
  • JPG 的解决方案是将文件重命名为thumbnail.jpg 并使用encodeJpg 方法而不是encodePng
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
相关资源
最近更新 更多