rasterizeImage static method
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;
}
}