之前写了一个flutter相机的开源库,现在给开源库增加了一个拍照增加水印的方法
开源库基本使用方法在上一篇文章:https://www.jianshu.com/p/7a76ece2064a
下边是加水印的方法,需要在CameraPreviewWidget创建的时候传入一个WatermarkOption,以此来确定水印的样式和位置
如下图红圈所示

WatermarkOption的构造参数说明
class WatermarkOption {
final Widget watermarkWidget;
final WatermarkPositionData positionData;
WatermarkOption({required this.watermarkWidget, required this.positionData});
}
1.watermarkWidget就是水印本身的widget,不需要太多说明
2.WatermarkPositionData用来确认水印的位置, 它包含2个参数,需要特殊说明一下
class WatermarkPositionData {
final WatermarkPosition position;
final double x;
final double y;
WatermarkPositionData({required this.position, this.x = 0, this.y = 0});
}
水印位置可以设置为左上,右上,中心,左下和右下五个位置。
enum WatermarkPosition {
topLeft,
topRight,
center,
bottomLeft,
bottomRight;
}
重要的事情说三遍~ 重要的事情说三遍~ 重要的事情说三遍~
当设置水印位置是topLeft时,
x参数代表marginLeft. y参数代表marginTop.
当设置水印位置是topRight时,
x参数代表marginRight. y参数代表marginTop.
当设置水印位置是bottomLeft时,
x参数代表marginLeft. y参数代表marginBottom.
当设置水印位置是bottomRight时,
x参数代表marginRight. y参数代表marginBottom.
当设置水印是center时,
x,y参数设置之后没有效果
最后要调用Controller的带水印拍照方法, 注意方法返回的数据类型是'dart:ui'中的image类型
final image = await _controller.takePictureWithWatermark();
如果预览时加了水印,但是拍照后的照片不像待水印,则还是调用原拍照方法
final XFile? image = await _controller.takePicture();
最后是GitHub地址:https://github.com/cgztzero/FlutterCameraX
欢迎各位多多交流,多多提bug和需求~~
寒冬中抱团取暖,如果北京有合适的flutter或者Android岗位麻烦各位同学可以帮忙推荐~