首页 > 解决方案 > 如何在不使用异步的情况下将图像转换为 uint8list?

问题描述

PdfImage 需要Uint8List作为参数,但我有ImageProvider。那么我们如何在flutter中将image转换为uint8list呢?

var imageProvider = AssetImage('assets/test.jpg');

final image = PdfImage(
  pdf.document,
  image:???, /// Uint8List required
  width: img.width,
  height: img.height,
);

使用 FutureBuilder: 在此处输入图像描述

标签: imagepdfimage-processingflutterflutter-layout

解决方案


利用rootBundle.load()

(await rootBundle.load(/*YOUR IMAGE PATH HERE*/)).buffer.asUint8List()

更新

作为load()异步操作,您需要等到数据完全加载。在此之前尝试用一些加载指示器替换 UI。

ByteData imageData;

@override
void initState() {
  rootBundle.load('assets/test.jpg')
    .then((data) => setState(() => this.imageData = data));
}

@override
Widget build(BuildContext context) {
  if (imageData == null) {
    return Center(child: CircularProgressIndicator());
  }

  final image = PdfImage(
    pdf.document,
    image: imageData.buffer.asUint8List(),
    width: img.width,
    height: img.height,
  );

  ...
}

推荐阅读