Flutter图片水印插件watermark_unique的使用
Flutter图片水印插件watermark_unique的使用
watermark_unique
是一个用于在图片上添加文本和图像水印的Flutter插件。你可以自定义水印的位置、颜色、背景颜色和填充等属性。
插件功能
- 向图片中添加文本
- 向图片中添加水印
- 通过File或Uint8List获取结果
可修改的参数
- 文本内容
- X轴位置
- Y轴位置
- 文字大小
- 文字颜色(带有透明度)
- 背景文字颜色(可选/带有透明度)
- 如果存在背景,则为文本设置内边距(可选)
- 图片质量
- 图像格式(用于压缩)
使用方法
添加文本水印示例(仅适用于iOS或Android)
import 'package:watermark_unique/watermark_unique.dart';
final image = await watermarkPlugin.addTextWatermark(
filePath: photo!.path, // 图片文件路径
text: 'Test watermark text', // 水印文本
x: 500, // X轴位置
y: 400, // Y轴位置
textSize: 250, // 文字大小
color: Colors.purpleAccent, // 文字颜色
isNeedRotateToPortrait: true, // 将图片旋转为纵向(默认:false)仅限Android
backgroundTextColor: Colors.black.withOpacity(0.5), // 背景文字颜色(可选)
quality: 100, // 带有水印的图片质量
backgroundTextPaddingLeft: 12, // 背景文本左边距(可选)
backgroundTextPaddingTop: 12, // 背景文本顶边距(可选)
backgroundTextPaddingRight: 12, // 背景文本右边距(可选)
backgroundTextPaddingBottom: 12, // 背景文本底边距(可选)
imageFormat: ImageFormat.jpeg, // 用于压缩的图像格式
);
添加图像水印示例(仅适用于iOS或Android)
final image = await watermarkPlugin.addImageWatermark(
filePath: photo!.path, // 图片文件路径
watermarkImagePath: watermark!.path, // 水印图片文件路径
x: 500, // X轴位置
y: 400, // Y轴位置
quality: 100, // 带有水印的图片质量
imageFormat: ImageFormat.jpeg, // 用于压缩的图像格式
watermarkWidth: 300, // 水印图片宽度
watermarkHeight: 300, // 水印图片高度
);
添加文本水印并以Uint8List形式获取结果(支持iOS、Android和Web)
final image = await watermarkPlugin.addTextWatermarkUint8List(
filePath: photo!.path, // 图片文件路径
text: 'Test watermark text', // 水印文本
x: 500, // X轴位置
y: 400, // Y轴位置
textSize: 250, // 文字大小
color: Colors.purpleAccent, // 文字颜色
isNeedRotateToPortrait: true, // 将图片旋转为纵向(默认:false)仅限Android
backgroundTextColor: Colors.black, // 背景文字颜色(可选)
backgroundTextPaddingLeft: 12, // 背景文本左边距(可选)
backgroundTextPaddingTop: 12, // 背景文本顶边距(可选)
backgroundTextPaddingRight: 12, // 背景文本右边距(可选)
backgroundTextPaddingBottom: 12, // 背景文本底边距(可选)
);
添加图像水印并以Uint8List形式获取结果(支持iOS、Android和Web)
final image = await watermarkPlugin.addImageWatermarkUint8List(
filePath: photo!.path, // 图片文件路径
watermarkImagePath: watermark!.path, // 水印图片文件路径
x: 500, // X轴位置
y: 400, // Y轴位置
watermarkWidth: 300, // 水印图片宽度
watermarkHeight: 300, // 水印图片高度
);
示例截图
完整的示例Demo
下面是一个完整的Flutter应用示例,展示了如何使用watermark_unique
插件:
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:watermark_unique/watermark_unique.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Center(child: Text('Watermark Example')),
),
body: const WatermarkExample(),
),
);
}
}
class WatermarkExample extends StatefulWidget {
const WatermarkExample({Key? key}) : super(key: key);
@override
_WatermarkExampleState createState() => _WatermarkExampleState();
}
class _WatermarkExampleState extends State<WatermarkExample> {
final ImagePicker _picker = ImagePicker();
XFile? _image;
XFile? _watermark;
Future<void> _pickImage() async {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
_image = pickedFile;
});
}
}
Future<void> _pickWatermark() async {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
_watermark = pickedFile;
});
}
}
Future<void> _addTextWatermark() async {
if (_image == null) return;
final result = await watermarkPlugin.addTextWatermark(
filePath: _image!.path,
text: 'Hello Watermark',
x: 100,
y: 100,
textSize: 50,
color: Colors.red,
quality: 100,
imageFormat: ImageFormat.jpeg,
);
// Handle the result as needed.
}
Future<void> _addImageWatermark() async {
if (_image == null || _watermark == null) return;
final result = await watermarkPlugin.addImageWatermark(
filePath: _image!.path,
watermarkImagePath: _watermark!.path,
x: 100,
y: 100,
quality: 100,
imageFormat: ImageFormat.jpeg,
watermarkWidth: 100,
watermarkHeight: 100,
);
// Handle the result as needed.
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
ElevatedButton(
onPressed: _pickImage,
child: Text('Pick an Image'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _pickWatermark,
child: Text('Pick a Watermark Image'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _addTextWatermark,
child: Text('Add Text Watermark'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _addImageWatermark,
child: Text('Add Image Watermark'),
),
if (_image != null) ...[
SizedBox(height: 20),
Image.file(File(_image!.path)),
],
],
),
);
}
}
以上代码展示了如何从相册中选择图片,并添加文本和图像水印的基本用法。根据需要调整参数可以实现不同的效果。
更多关于Flutter图片水印插件watermark_unique的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片水印插件watermark_unique的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用watermark_unique
插件来给图片添加水印的示例代码。这个插件允许你在图片上添加文字或图像水印。
首先,你需要在pubspec.yaml
文件中添加watermark_unique
依赖:
dependencies:
flutter:
sdk: flutter
watermark_unique: ^x.y.z # 请将x.y.z替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Dart文件中使用以下代码来给图片添加水印:
import 'package:flutter/material.dart';
import 'package:watermark_unique/watermark_unique.dart';
import 'dart:ui' as ui;
import 'dart:typed_data';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: WatermarkExample(),
);
}
}
class WatermarkExample extends StatefulWidget {
@override
_WatermarkExampleState createState() => _WatermarkExampleState();
}
class _WatermarkExampleState extends State<WatermarkExample> {
Uint8List? watermarkedImage;
@override
void initState() {
super.initState();
_addWatermark();
}
Future<void> _addWatermark() async {
// 加载原始图片
final ByteData imageData = await rootBundle.load('assets/your_image.png');
final Uint8List imageBytes = imageData.buffer.asUint8List();
final ui.Codec codec = await ui.instantiateImageCodec(imageBytes);
final ui.FrameInfo frameInfo = await codec.getNextFrame();
final ui.Image image = frameInfo.image;
// 创建水印配置
final WatermarkConfig config = WatermarkConfig(
text: 'Sample Watermark',
textStyle: TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.bold,
),
position: WatermarkPosition.bottomRight,
margin: EdgeInsets.all(10),
backgroundColor: Colors.black.withOpacity(0.5),
padding: EdgeInsets.all(5),
borderRadius: 10,
);
// 添加水印
final WatermarkUnique watermarkUnique = WatermarkUnique();
final Uint8List watermarkedImageBytes = await watermarkUnique.addWatermark(
image: image,
config: config,
);
// 更新状态
setState(() {
watermarkedImage = watermarkedImageBytes;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Watermark Example'),
),
body: Center(
child: watermarkedImage != null
? Image.memory(watermarkedImage!)
: CircularProgressIndicator(),
),
);
}
}
请注意以下几点:
-
确保在
assets
文件夹中有一个名为your_image.png
的图片文件,并在pubspec.yaml
中声明它:flutter: assets: - assets/your_image.png
-
WatermarkConfig
类提供了多种配置选项,你可以根据需要调整水印的文本、样式、位置、边距、背景颜色和填充等。 -
在实际项目中,你可能需要在
Image.memory
组件上添加错误处理,以防水印添加失败或其他图像加载问题。 -
watermark_unique
插件可能会随着版本更新而有所变化,因此请参考最新的文档和示例代码以获取最佳实践。
这个示例展示了如何使用watermark_unique
插件在Flutter应用中给图片添加文本水印。如果你需要添加图像水印,可以查阅插件的文档以了解更多高级用法。