Flutter相机拍照给图片加水印(相机开源库第二篇)

365 阅读2分钟

之前写了一个flutter相机的开源库,现在给开源库增加了一个拍照增加水印的方法 开源库基本使用方法在上一篇文章:juejin.cn/post/746961…

下边是加水印的方法,需要在CameraPreviewWidget创建的时候传入一个WatermarkOption,以此来确定水印的样式和位置 如下图红圈所示 1111.png

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地址:github.com/cgztzero/Fl…

欢迎各位多多交流,多多提bug和需求~~

寒冬中抱团取暖,如果北京有合适的flutter或者Android岗位麻烦各位同学可以帮忙推荐~