maybeResizeAndDownsampleImageBlock method

Future<ImageBlockWithDimensions> maybeResizeAndDownsampleImageBlock(
  1. Map<String, dynamic> imageBlock
)

Resizes an image content block if needed.

Implementation

Future<ImageBlockWithDimensions> maybeResizeAndDownsampleImageBlock(
  Map<String, dynamic> imageBlock,
) async {
  final source = imageBlock['source'] as Map<String, dynamic>?;
  if (source == null || source['type'] != 'base64') {
    return ImageBlockWithDimensions(block: imageBlock);
  }

  final base64Data = source['data'] as String;
  final imageBuffer = Uint8List.fromList(base64Decode(base64Data));
  final originalSize = imageBuffer.length;
  final mediaType = source['media_type'] as String? ?? 'image/png';
  final ext = mediaType.split('/').last;

  final resized = await maybeResizeAndDownsampleImageBuffer(
    imageBuffer,
    originalSize,
    ext,
  );

  return ImageBlockWithDimensions(
    block: {
      'type': 'image',
      'source': {
        'type': 'base64',
        'media_type': 'image/${resized.mediaType}',
        'data': base64Encode(resized.buffer),
      },
    },
    dimensions: resized.dimensions,
  );
}