rasterizeImage static method

Future<UPdfRaster?> rasterizeImage(
  1. Uint8List encoded, {
  2. int maxSize = 2048,
})

Implementation

static Future<UPdfRaster?> rasterizeImage(Uint8List encoded, {int maxSize = 2048}) async {
  try {
    final ui.Codec codec = await ui.instantiateImageCodec(encoded);
    final ui.FrameInfo frame = await codec.getNextFrame();
    ui.Image image = frame.image;
    if (image.width > maxSize || image.height > maxSize) {
      final double scale = maxSize / (image.width > image.height ? image.width : image.height);
      final int width = (image.width * scale).round().clamp(1, maxSize);
      final int height = (image.height * scale).round().clamp(1, maxSize);
      final ui.PictureRecorder recorder = ui.PictureRecorder();
      final Canvas canvas = Canvas(recorder);
      canvas.drawImageRect(
        image,
        Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble()),
        Rect.fromLTWH(0, 0, width.toDouble(), height.toDouble()),
        Paint()..filterQuality = FilterQuality.medium,
      );
      final ui.Picture picture = recorder.endRecording();
      final ui.Image resized = await picture.toImage(width, height);
      picture.dispose();
      image.dispose();
      image = resized;
    }
    final ByteData? data = await image.toByteData();
    final int width = image.width;
    final int height = image.height;
    image.dispose();
    if (data == null) return null;
    return UPdfRaster(data.buffer.asUint8List(), width, height);
  } on Object {
    return null;
  }
}