Flutter实现相机添加文字水印并保存带水印照片至相册方法求教
Flutter相机添加水印并保存至相册实现方案
一、依赖准备
在pubspec.yaml中添加以下依赖:
dependencies: flutter: sdk: flutter camera: ^0.10.5+5 # 相机功能 image: ^4.0.17 # 图片处理 image_gallery_saver: ^2.0.3 # 保存到相册 path_provider: ^2.1.1 # 获取本地路径
执行flutter pub get完成依赖安装。
二、相机预览层显示水印(视觉预览)
用Stack组件将水印叠加在相机预览上方,拍照前就能直观看到水印效果:
Stack( children: [ CameraPreview(_controller), // 相机预览组件 Positioned( bottom: 20, right: 20, child: Text( "自定义水印", style: TextStyle( color: Colors.white, fontSize: 18, shadows: const [Shadow(color: Colors.black, blurRadius: 2)], ), ), ), ], )
可根据需求调整水印位置、样式,比如换成带背景的Container或图片水印。
三、拍照后给图片添加真实水印
UI层的水印不会被写入照片,需用image包处理拍摄后的图片,添加永久水印:
// 拍照获取原始图片 XFile rawPicture = await _controller.takePicture(); File imageFile = File(rawPicture.path); Uint8List rawBytes = await imageFile.readAsBytes(); // 解码图片为可编辑对象 Image editableImage = decodeImage(rawBytes)!; // 创建画布并设置画笔 Canvas canvas = Canvas(editableImage); Paint textPaint = Paint() ..color = Colors.white ..style = PaintingStyle.fill; // 绘制文字水印(使用内置字体,若需自定义字体可加载本地字体文件) drawString( canvas, arial_48, // 内置字体,替换为自定义字体需提前加载 "自定义水印", editableImage.width - 160, // 水印右侧偏移量 editableImage.height - 90, // 水印底部偏移量 textPaint, ); // 编码处理后的图片 Uint8List watermarkedBytes = encodeJpg(editableImage);
四、保存带水印的图片到相册
用image_gallery_saver将处理后的图片存入系统相册:
final saveResult = await ImageGallerySaver.saveImage( watermarkedBytes, quality: 90, name: "watermarked_${DateTime.now().millisecondsSinceEpoch}", ); if (saveResult['isSuccess']) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("照片已保存至相册")), ); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("保存失败,请重试")), ); }
五、权限配置
- Android:在
android/app/src/main/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33" />
- iOS:在
ios/Runner/Info.plist中添加权限说明:
<key>NSCameraUsageDescription</key> <string>需要使用相机拍摄照片</string> <key>NSPhotoLibraryAddUsageDescription</key> <string>需要将照片保存到相册</string>
内容的提问来源于stack exchange,提问作者Raj Dev
相关产品推荐
相关产品推荐

