Flutter图片水印插件flutter_watermark的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter图片水印插件 flutter_watermark 的使用

flutter_watermark 是一个帮助你在Flutter应用中全局添加水印的新插件。本文将介绍如何使用该插件,并提供完整的示例代码。

截图

flutter_watermark

使用方法

初始化插件

首先,你需要初始化插件:

final DisableScreenshots _plugin = DisableScreenshots();

添加默认样式的水印

你可以通过以下方式添加默认样式的水印:

_plugin.addWatermark(context, "默认水印", rowCount: 4, columnCount: 8);

添加自定义Widget作为水印

你也可以通过传递自定义的Widget来创建水印:

_plugin.addCustomWatermark(
    context,
    const Watermark(
        rowCount: 3, 
        columnCount: 10, 
        text: "自定义水印"
    )
);

移除水印

当需要移除水印时,调用以下方法:

_plugin.removeWatermark();

完整示例代码

以下是完整的示例代码,展示了如何在你的Flutter应用中集成和使用flutter_watermark插件:

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_watermark/flutter_watermark.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(home: RootApp());
  }
}

class RootApp extends StatelessWidget {
  RootApp({super.key});

  // 初始化插件
  final DisableScreenshots _plugin = DisableScreenshots();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('全局水印'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            ElevatedButton(
                onPressed: () => _plugin.addWatermark(context, "默认水印",
                    rowCount: 4, columnCount: 8),
                child: const Text("添加默认水印")),
            ElevatedButton(
                onPressed: () => _plugin.addCustomWatermark(
                    context,
                    const Watermark(
                        rowCount: 3, columnCount: 10, text: "自定义水印")),
                child: const Text("添加自定义水印")),
            ElevatedButton(
                onPressed: () => _plugin.removeWatermark(),
                child: const Text("删除水印")),
            ElevatedButton(
                onPressed: () => Navigator.of(context).push(MaterialPageRoute(
                    builder: (_) => Scaffold(
                          appBar: AppBar(
                            title: const Text("我是新页面"),
                          ),
                          body: const Center(child: Text("new page")),
                        ))),
                child: const Text("进入新页面"))
          ],
        ),
      ),
    );
  }
}

class Watermark extends StatelessWidget {
  final int rowCount;
  final int columnCount;
  final String text;

  const Watermark({
    Key? key,
    required this.rowCount,
    required this.columnCount,
    required this.text,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return IgnorePointer(
      child: Column(
        children: createColumnWidgets(),
      ),
    );
  }

  List<Widget> createRowWidgets() {
    List<Widget> list = [];
    for (var i = 0; i < rowCount; i++) {
      final widget = Expanded(
          child: Center(
              child: Transform.rotate(
        angle: pi / 10,
        child: Text(
          text,
          style: const TextStyle(
              color: Color(0x08000000),
              fontSize: 18,
              decoration: TextDecoration.none),
        ),
      )));
      list.add(widget);
    }
    return list;
  }

  List<Widget> createColumnWidgets() {
    List<Widget> list = [];
    for (var i = 0; i < columnCount; i++) {
      final widget = Expanded(
          child: Row(
        children: createRowWidgets(),
      ));
      list.add(widget);
    }
    return list;
  }
}

更多关于Flutter图片水印插件flutter_watermark的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片水印插件flutter_watermark的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用flutter_watermark插件来给图片添加水印的示例代码。这个插件允许你在图片上添加文本或图像水印。

首先,你需要在pubspec.yaml文件中添加flutter_watermark依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_watermark: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Dart文件中使用flutter_watermark插件。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_watermark/flutter_watermark.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();
    _addWatermarkToImage();
  }

  Future<void> _addWatermarkToImage() 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 Watermark watermark = Watermark()
      ..addText(
        text: 'Watermark Text',
        color: Colors.red,
        fontSize: 24.0,
        align: WatermarkAlign.bottomRight,
        margin: EdgeInsets.all(10),
      )
      ..addImage(
        imagePath: 'assets/watermark_image.png', // 水印图片路径
        align: WatermarkAlign.topLeft,
        margin: EdgeInsets.all(10),
        scale: 0.5, // 水印图片缩放比例
      );

    // 添加水印并获取结果图片
    watermarkedImage = await watermark.add(image: image);

    // 更新UI
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Watermark Example'),
      ),
      body: Center(
        child: watermarkedImage != null
            ? Image.memory(watermarkedImage!)
            : CircularProgressIndicator(),
      ),
    );
  }
}

在上面的代码中,我们做了以下几件事:

  1. 加载原始图片:使用rootBundle.load加载了一个位于assets目录下的图片。
  2. 创建水印:使用Watermark类创建了一个水印对象,并添加了一个文本水印和一个图像水印。
  3. 添加水印:调用watermark.add(image: image)方法将水印添加到原始图片上,并获取结果图片。
  4. 显示结果图片:使用Image.memory显示添加水印后的图片。

请注意,你需要将示例中的your_image.pngwatermark_image.png替换为你实际使用的图片文件,并确保这些图片已经添加到你的Flutter项目的assets目录下,并在pubspec.yaml文件中进行了相应的配置。

例如,在pubspec.yaml中添加图片资源:

flutter:
  assets:
    - assets/your_image.png
    - assets/watermark_image.png

这样,你就可以在Flutter应用中使用flutter_watermark插件来给图片添加水印了。

回到顶部