首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以把Future<Uint8List>转换成Uint8List吗?

我可以把Future<Uint8List>转换成Uint8List吗?
EN

Stack Overflow用户
提问于 2022-11-08 01:10:19
回答 1查看 32关注 0票数 -1

我正在制作一个水印图像使用颤振和我需要转换未来到Uint8List。

这是发生问题的代码。

代码语言:javascript
复制
child: Image.memory(putWatermarkOnImage(asset))

子容器在容器小部件中,putWatermarkOnImage函数的结果必须是Uint8List类型,而不是将来的类型。

代码语言:javascript
复制
Future<Uint8List> putWatermarkOnImage(asset) async {
  final assetFile = await asset.file;
  var imageBytes = await assetFile!.readAsBytes();
  ByteData watermarkImgByteData = await rootBundle.load('assets/images/ournow_logo.png');
  Uint8List watermarkImgBytes = watermarkImgByteData.buffer.asUint8List();
  Uint8List imageUint8List = Uint8List.fromList(imageBytes);
  Uint8List watermarkedImg = await ImageWatermark.addImageWatermark(
      originalImageBytes: imageUint8List,
      waterkmarkImageBytes: watermarkImgBytes,
      imgHeight: 200,
      imgWidth: 200,
      dstY: 400,
      dstX: 400);
  return watermarkedImg;
}

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-11-08 02:40:46

我采用了您的代码,并以避免混淆的方式编写了代码,因此我为您创建了一个类,用于收集所有与字节转换相关的方法,并将它们称为"BytesHandlers“。

然后,我重新组织代码如下,我相信它会工作,请测试它,并告诉我,如果有什么问题。

代码语言:javascript
复制
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:wechat_camera_picker/wechat_camera_picker.dart';

Future<Uint8List> putWatermarkOnImage(AssetEntity asset) async {
  Uint8List _output;

  if (asset != null){

    final File assetFile = await asset.file;

    final ByteData watermarkImgByteData = await BytesHandlers.getByteDataFromPath('assets/images/ournow_logo.png');

    _output = await BytesHandlers.getUint8ListFromFile(assetFile);

    _output = await ImageWatermark.addImageWatermark(
        originalImageBytes: _output,
        waterkmarkImageBytes: watermarkImgByteData,
        imgHeight: 200,
        imgWidth: 200,
        dstY: 400,
        dstX: 400
    );

  }

  return _output;
}

class BytesHandlers {
  // --------------------
  BytesHandlers();
  // --------------------
  static Future<ByteData> getByteDataFromPath(String assetPath) async {
    /// NOTE : Asset path can be local path or url
    ByteData _byteData;

    if (assetPath != null){
      _byteData = await rootBundle.load(assetPath);
    }

    return _byteData;
  }
  // --------------------
  static Future<Uint8List> getUint8ListFromFile(File file) async {
    Uint8List _uInt;

    if (file != null){
      _uInt = await file.readAsBytes();
    }
    return _uInt;
  }
  // --------------------
}

然后你就可以这样称呼它

代码语言:javascript
复制
final Uint8List _ImageWithWatermark = await putWatermarkOnImage(_inputFile);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74354648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档