从 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.instantiateImageCodec
和getNextFrame()
?
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 数据更改图像大小的主要内容,如果未能解决你的问题,请参考以下文章
来自数据库的 Flutter Uint8list 字符串呈现为图像
Flutter web 从 Uint8List 字节获取文件在偏移量 11 处缺少扩展类型