Widget 截图
RepaintBoundary 用作需要截图的Widget的父Widget。
GlobalKey 作为RepaintBoundary的key。
final GlobalKey _globalKey = GlobalKey();
@override
Widget build(BuildContext context) {
_captureScreenshot();
return RepaintBoundary(
key: _globalKey,
child: Container(
...
),
);
}
获取截图:
Future<void> _captureScreenshot() async {
await Future.delayed(const Duration(seconds: 1));
try {
if(!mounted){
debugPrint('currentContext is null');
return ;
}
RenderRepaintBoundary boundary = _globalKey.currentContext!
.findRenderObject() as RenderRepaintBoundary;
ui.Image image = await boundary.toImage();
ByteData? byteData =
await image.toByteData(format: ui.ImageByteFormat.png);
Uint8List pngBytes = byteData!.buffer.asUint8List();
final image = Image.memory(pngBytes);
} catch (e) {
debugPrint(e.toString());
}
}
}
Flutter plugin
Dart Image 库
pub-web.flutter-io.cn/packages/im…
import 'package:image/image.dart' as img;
void handleResult(FaceInfo result, img.Image imageInput) {
final x1 = result.x1.toInt();
final y1 = result.y1.toInt();
final width = (result.x2 - result.x1).toInt();
final height = (result.y2 - result.y1).toInt();
final cropImage =
img.copyCrop(imageInput, x: x1, y: y1, width: width, height: height);
//转为png图片
final data = img.encodePng(cropImage);
}
第三方插件
crop_image: pub-web.flutter-io.cn/packages/cr…
cropperx: pub-web.flutter-io.cn/packages/cr…
image_cropping: pub-web.flutter-io.cn/packages/im…