downloadResizePictureCircle static method
Future<BitmapDescriptor>
downloadResizePictureCircle(
- String imageUrl, {
- int size = 150,
- bool addBorder = false,
- Color borderColor = Colors.white,
- double borderSize = 10,
})
Implementation
static Future<BitmapDescriptor> downloadResizePictureCircle(
String imageUrl, {
int size = 150,
bool addBorder = false,
Color borderColor = Colors.white,
double borderSize = 10,
}) async {
final File imageFile = await DefaultCacheManager().getSingleFile(imageUrl);
final ui.PictureRecorder pictureRecorder = ui.PictureRecorder();
final Canvas canvas = Canvas(pictureRecorder);
final Paint paint = Paint()..color;
final double radius = size / 2;
//make canvas clip path to prevent image drawing over the circle
final Path clipPath = Path();
clipPath
.addRRect(RRect.fromRectAndRadius(Rect.fromLTWH(0, 0, size.toDouble(), size.toDouble()), Radius.circular(100)));
/* clipPath.addRRect(RRect.fromRectAndRadius(
Rect.fromLTWH(0, size * 8 / 10, size.toDouble(), size * 3 / 10),
Radius.circular(100))); */
canvas.clipPath(clipPath);
//paintImage
final Uint8List imageUint8List = await imageFile.readAsBytes();
final ui.Codec codec = await ui.instantiateImageCodec(imageUint8List);
final ui.FrameInfo imageFI = await codec.getNextFrame();
paintImage(
fit: BoxFit.cover,
alignment: Alignment.center,
canvas: canvas,
rect: Rect.fromLTWH(0, 0, size.toDouble(), size.toDouble()),
image: imageFI.image);
if (addBorder) {
//draw Border
paint..color = borderColor;
paint..style = PaintingStyle.stroke;
paint..strokeWidth = borderSize;
canvas.drawCircle(Offset(radius, radius), radius, paint);
}
//convert canvas as PNG bytes
final _image = await pictureRecorder.endRecording().toImage(size, (size * 1.1).toInt());
final data = await _image.toByteData(format: ui.ImageByteFormat.png);
//convert PNG bytes as BitmapDescriptor
return BitmapDescriptor.fromBytes(data!.buffer.asUint8List());
}