从 Flutter 中的 Uint8List 数据更改图像大小

Posted

技术标签:

【中文标题】从 Flutter 中的 Uint8List 数据更改图像大小【英文标题】:Change Image Size From Uint8List Data in Flutter 【发布时间】:2020-10-13 00:14:54 【问题描述】:

我正在尝试根据 uint8list 数据更改图像大小。

如你所知,Flutter 中有很多 Image 类, 我想得到的最后一种图像是 ui.Image。

我从套接字通信中获取 Uint8List Image(.jpg) 数据。 现在,我想设置图片的大小,最后得到ui.Image的Image。

我试图通过 (dart:ui : ui, package:image/image.dart : IMG) 来做到这一点

IMG.Image img = IMG.decodeImage(data);
IMG.Image resized = IMG.copyResize(img, width: 400, height: 200);
ui.Codec codec = await ui.instantiateImageCodec(IMG.encodeJpg(resized));
ui.Image image = (await codec.getNextFrame()).image;

,但它会冻结应用程序。

我该怎么做?有什么办法吗?谢谢。

另外, 在“flutter/lib/src/widgets/image.dart”中, Image.memory(Uint8List, width, height) 可以很容易地设置图像大小。 有什么方法可以从该 Image 小部件中获取 Uint8List 吗?

【问题讨论】:

【参考方案1】:

我在 Uint8List 中调整了图像数据的大小,如下所示。

import package:image/image.dart as IMG

Uint8List resizeImage(Uint8List data) 
        Uint8List resizedData = data;
        IMG.Image img = IMG.decodeImage(data);
        IMG.Image resized = IMG.copyResize(img, width: img.width*2, height: img.height*2);
        resizedData = IMG.encodeJpg(resized);
        return resizedData;
       

IMG : 颤振图片包

【讨论】:

【参考方案2】:

您是否尝试过使用ui.decodeImageFromList 代替ui.instantiateImageCodecgetNextFrame()

import 'dart:ui' as ui;

ui.decodeImageFromList(IMG.encodeJpg(resized), (ui.Image img) 
  // returned ui.Image
);

【讨论】:

感谢您的回答!当我使用ui.Image img数据时,显示无效图像数据错误。 您是否在结果 img 上调用了“getNextFrame()”? @JaehyungKim 当 IMG.encodeJpg(resized) 返回 List 时如何工作

以上是关于从 Flutter 中的 Uint8List 数据更改图像大小的主要内容,如果未能解决你的问题,请参考以下文章

从 uInt8List Flutter 裁剪图像

如何从网络图像中获取 Flutter Uint8List?

来自数据库的 Flutter Uint8list 字符串呈现为图像

Flutter web 从 Uint8List 字节获取文件在偏移量 11 处缺少扩展类型

Flutter 将 Uint8List 传递给 iOS Objective-c

Flutter 将十六进制转换为 Uint8list