maybeResizeAndDownsampleImageBlock method
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,
);
}