Flutter图像遮罩处理插件image_masking_flutter的使用

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

Flutter图像遮罩处理插件image_masking_flutter的使用

image_masking_flutter 插件允许开发者创建一个交互式的图像揭示效果。它使用户可以通过在屏幕上拖动手指来交互式地揭示或着色图像。

安装

要使用此插件,在 pubspec.yaml 文件中添加 image_masking_flutter 作为依赖项:

dependencies:
  image_masking_flutter: ^1.0.0

使用

首先,导入 image_masking_flutter 包:

import 'package:image_masking_flutter/image_masking_widget.dart';

创建一个 GlobalKey

final GlobalKey<ImageMaskingWidgetState> _imageMaskingKey = GlobalKey<ImageMaskingWidgetState>();

使用 Image Masking Widget

ImageMaskingWidget(
  key: _imageMaskingKey,
  height: MediaQuery.of(context).size.height / 2,
  width: MediaQuery.of(context).size.width,
  margin: EdgeInsets.symmetric(vertical: MediaQuery.of(context).size.height / 4, horizontal: 15),
  decoration: BoxDecoration(
    border: Border.all(color: Colors.black, width: 2)
  ),
  coloredImage: "assets/images/kid_color.jpeg", // 使用着色图像
  unColoredImage: "assets/images/kid_uncolor.jpeg", // 使用未着色的轮廓图像(大小和分辨率与上面的着色图像相同)
)

重置视图

_imageMaskingKey.currentState?.resetView();

示例代码

以下是一个完整的示例代码,展示了如何使用 image_masking_flutter 插件:

import 'package:flutter/material.dart';
import 'package:image_masking_flutter/image_masking_widget.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 图像遮罩',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final GlobalKey<ImageMaskingWidgetState> _imageMaskingKey = GlobalKey<ImageMaskingWidgetState>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          mainImageView(context),
          topbarView(),
          eraserView(),
        ],
      ),
    );
  }

  Widget mainImageView(BuildContext context) {
    return ImageMaskingWidget(
      key: _imageMaskingKey,
      height: MediaQuery.of(context).size.height / 2,
      width: MediaQuery.of(context).size.width,
      margin: EdgeInsets.symmetric(
          vertical: MediaQuery.of(context).size.height / 4, horizontal: 15),
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black, width: 2)
      ),
      coloredImage: "assets/images/kid_color.jpeg", // 使用着色图像
      unColoredImage: "assets/images/kid_uncolor.jpeg", // 使用未着色的轮廓图像(大小和分辨率与上面的着色图像相同)
    );
  }

  Widget topbarView() {
    return Container(
      color: Colors.blue,
      width: double.infinity,
      height: 120,
      alignment: Alignment.bottomCenter,
      padding: const EdgeInsets.only(bottom: 20),
      child: const Text("图像遮罩",
          style: TextStyle(
              fontWeight: FontWeight.w500, color: Colors.white, fontSize: 26)),
    );
  }

  Widget eraserView() {
    return Positioned(
        bottom: 0,
        left: 0,
        right: 0,
        child: GestureDetector(
          onTap: () {
            _imageMaskingKey.currentState?.resetView();
          },
          child: Container(
              margin: const EdgeInsets.only(bottom: 100),
              decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  color: Colors.grey.shade200,
                  border: Border.all(color: Colors.black, width: 1)),
              padding: const EdgeInsets.all(15),
              child: const Icon(
                Icons.cleaning_services,
                size: 30,
              )),
        ));
  }
}

更多关于Flutter图像遮罩处理插件image_masking_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图像遮罩处理插件image_masking_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 image_masking_flutter 插件在 Flutter 中进行图像遮罩处理的示例代码。这个插件允许你使用 SVG 或 PNG 格式的遮罩图像来对目标图像进行遮罩处理。

首先,确保你已经在 pubspec.yaml 文件中添加了 image_masking_flutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  image_masking_flutter: ^最新版本号  # 请替换为实际最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Dart 文件中使用 ImageMasking 小部件来进行图像遮罩处理。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:image_masking_flutter/image_masking_flutter.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Image Masking Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImageMaskingScreen(),
    );
  }
}

class ImageMaskingScreen extends StatefulWidget {
  @override
  _ImageMaskingScreenState createState() => _ImageMaskingScreenState();
}

class _ImageMaskingScreenState extends State<ImageMaskingScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Masking Demo'),
      ),
      body: Center(
        child: ImageMasking(
          imageProvider: AssetImage('assets/your_image.png'), // 替换为你的目标图像路径
          maskProvider: AssetImage('assets/your_mask.png'), // 替换为你的遮罩图像路径
          height: 300, // 设置显示高度
          width: 300, // 设置显示宽度
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几步:

  1. 添加依赖:在 pubspec.yaml 文件中添加了 image_masking_flutter 依赖。
  2. 创建主应用:定义了一个 MyApp 类,它包含了一个 MaterialApp,并设置了主页面为 ImageMaskingScreen
  3. 创建主页面ImageMaskingScreen 是一个有状态的小部件,它在其 build 方法中返回一个 Scaffold,包含一个 AppBar 和一个居中的 ImageMasking 小部件。
  4. 使用 ImageMasking 小部件:我们向 ImageMasking 小部件传递了两个 AssetImage,一个是目标图像(your_image.png),另一个是遮罩图像(your_mask.png)。同时,我们还设置了显示的高度和宽度。

请注意:

  • 你需要将你的目标图像和遮罩图像添加到 assets 文件夹中,并在 pubspec.yaml 文件中声明它们。
  • 确保遮罩图像是 PNG 格式,并且具有透明区域,以便正确应用遮罩效果。

例如,在 pubspec.yaml 中声明图像资源:

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

这样,运行应用后,你应该能够看到目标图像被遮罩图像所遮罩的效果。

回到顶部