Flutter图像处理插件photox_pro的使用

Flutter图像处理插件photox_pro的使用

photox_pro 是一个用于显示交互式图像的全方位解决方案(新增了功能)。

   

特性

  • 平滑地将图像动画化为全屏并返回。
  • 可通过滑动来关闭图像。
  • 支持捏合缩放。
  • 当提供多个图像时,自动生成可滑动的画廊。

开始使用

在你的 pubspec.yaml 文件中添加 photox_pro 作为依赖项:

flutter pub add photox_pro

导入 PhotoX

import 'package:photox_pro/photox_pro.dart';

使用示例

以下是一个简单的示例,展示了如何使用 PhotoX 插件来显示和处理图像:

[@override](/user/override)
Widget build(BuildContext context) {
  return Container(
    height: 400,
    width: 400,
    child: PhotoX(
      dismissMode: DismissMode.swipeVertical,
      placeholder: (context, url) => const Center(child: CircularProgressIndicator()),
      items: [
        PhotoXItem(
            id: "1",
            resource: "assets/img1.jpeg",
            isAsset: true
        ),
        PhotoXItem(
            id: "2",
            resource: "https://picsum.photos/1020/1020",
            isAsset: false
        ),
        PhotoXItem(
            id: "3",
            resource: "https://picsum.photos/1021/1021",
            isAsset: false
        ),
      ]
    )
  );
}

其他参数

dismissMode

dismissMode 参数控制图像的关闭方式。支持以下两种模式:

  • DismissMode.swipeAny:可以从任何方向滑动关闭图像。
  • DismissMode.swipeVertical:仅从垂直方向滑动关闭图像。
// 示例代码
dismissMode: DismissMode.swipeVertical

   

注意DismissMode.swipeAny 模式只能用于单个 PhotoXItem

showPageIndicator

是否在缩略图画廊中显示页面指示器。

// 示例代码
showPageIndicator: true

pageIndicatorAlignment

页面指示器相对于画廊的对齐方式。

// 示例代码
pageIndicatorAlignment: Alignment.bottomCenter

pageIndicatorActiveColor

活动气泡的颜色。

// 示例代码
pageIndicatorActiveColor: Colors.blue

pageIndicatorInactiveColor

非活动气泡的颜色。

// 示例代码
pageIndicatorInactiveColor: Colors.grey

pageIndicatorBackgroundColor

页面指示器的背景颜色。

// 示例代码
pageIndicatorBackgroundColor: Colors.black.withOpacity(0.5)

pageIndicatorBubbleRadius

指示器气泡的半径。

// 示例代码
pageIndicatorBubbleRadius: 5.0

pageIndicatorBubblePadding

气泡之间的间距。

// 示例代码
pageIndicatorBubblePadding: 5.0

fullscreenGalleryTitleTextStyle

全屏画廊中 AppBar 标题的样式。

// 示例代码
fullscreenGalleryTitleTextStyle: const TextStyle(color: Colors.white, fontSize: 20.0)

fullscreenGalleryAppBarLeadingWidget

自定义的 AppBar 领导小部件。

// 示例代码
fullscreenGalleryAppBarLeadingWidget: IconButton(
  icon: const Icon(Icons.arrow_back),
  onPressed: () {
    Navigator.pop(context);
  },
)

完整示例代码

以下是完整的示例代码,演示了如何使用 photox_pro 插件来显示和处理图像:

import 'package:flutter/material.dart';
import 'package:photox_pro/photox_pro.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 Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("DismissMode.swipeVertical"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('IMAGES'),
            SizedBox(
              height: 400,
              width: MediaQuery.of(context).size.width,
              child: PhotoX(
                dismissMode: DismissMode.swipeVertical,
                viewportFraction: 0.8,
                thumbnailPadding: const EdgeInsets.symmetric(horizontal: 10.0),
                placeholder: (context, url) => const Center(child: CircularProgressIndicator()),
                errorImage: (context, url, error) => const Icon(Icons.error, color: Colors.red),
                items: [
                  PhotoXItem(
                    id: "1",
                    resource: "assets/img1.jpeg",
                    isAsset: true
                  ),
                  PhotoXItem(
                    id: "2",
                    resource: "https://picsum.photos/1020/1020",
                    isAsset: false
                  ),
                  PhotoXItem(
                    id: "3",
                    resource: "https://picsum.photos/1021/1021",
                    isAsset: false
                  ),
                  PhotoXItem(
                    id: "4",
                    resource: "https://picsum.photos/1022/1022",
                    isAsset: false
                  ),
                ]
              )
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter图像处理插件photox_pro的示例代码。这个示例将展示如何加载图像、应用一些基本的图像处理操作(如滤镜),并显示处理后的图像。

首先,确保在你的pubspec.yaml文件中添加photox_pro依赖:

dependencies:
  flutter:
    sdk: flutter
  photox_pro: ^最新版本号  # 替换为当前最新版本号

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

接下来,在你的Flutter项目中,你可以创建一个简单的界面来展示图像处理功能。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:photox_pro/photox_pro.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(
      title: 'PhotoX Pro Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  Uint8List? imageBytes;
  Uint8List? processedImageBytes;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PhotoX Pro Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (imageBytes != null)
              Image.memory(imageBytes!),
            SizedBox(height: 20),
            if (processedImageBytes != null)
              Image.memory(processedImageBytes!),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // Load an image from assets (or you can load from network/gallery)
                ByteData byteData = await rootBundle.load('assets/sample.jpg');
                imageBytes = byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes);

                // Initialize PhotoX
                final PhotoX photoX = PhotoX();
                
                // Apply a sepia filter
                final processedImage = await photoX.applyFilter(
                  imageBytes!,
                  FilterOption.sepia,
                );
                
                // Update state with processed image
                setState(() {
                  processedImageBytes = processedImage;
                });
              },
              child: Text('Apply Sepia Filter'),
            ),
          ],
        ),
      ),
    );
  }
}

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

  1. 添加依赖:在pubspec.yaml文件中添加了photox_pro依赖。
  2. 创建界面:使用MaterialAppScaffold创建了一个简单的界面。
  3. 加载图像:从Flutter的assets中加载了一张示例图像(确保在pubspec.yamlassets部分添加了该图像)。
  4. 应用滤镜:使用PhotoX类的applyFilter方法应用了一个sepia滤镜。
  5. 显示图像:使用Image.memory显示原始图像和处理后的图像。

注意:

  • 你需要确保在项目的assets文件夹中有一个名为sample.jpg的图像文件,并在pubspec.yaml中正确配置assets路径。
  • FilterOption.sepiaphotox_pro插件提供的一个滤镜选项,你可以根据插件文档使用其他滤镜选项。

这个示例代码展示了如何使用photox_pro插件进行基本的图像处理操作。根据插件的文档,你可以探索更多高级功能和滤镜选项。

回到顶部