Flutter图片合并插件merge_images的使用

Flutter图片合并插件merge_images的使用

中文文档

简介

在垂直或水平方向上合并图片(图像拼接)。 预览

特性

  • 支持垂直和水平方向。
  • 提供一个帮助类来在代码中合并图片并获取结果图片,以及一个自动合并和显示图片的部件。
  • 自动缩放图片以适应其他图片(垂直方向上适应宽度,在水平方向上适应高度)。

使用方法

ImagesMergeHelper

使用此帮助类在代码中合并图片。

ui.Image image = await ImagesMergeHelper.margeImages(
  [assetImage1, assetImage2, providerImage], /// 必须,图片列表
  fit: true, /// 缩放图片以适应其他图片
  direction: Axis.vertical, /// 图片的方向
  backgroundColor: Colors.black26, /// 背景颜色
);

此外,它还提供了一些函数来进行图片格式转换:

/// ui.Image 转 Uint8List
Uint8List bytes = await ImagesMergeHelper.imageToUint8List(image);

/// ui.Image 转 File
File file = await ImagesMergeHelper.imageToFile(image);

/// Uint8List 转 ui.Image
ui.Image image = await ImagesMergeHelper.uint8ListToImage(imageBytes);

/// file 转 ui.Image
ui.Image image = await ImagesMergeHelper.loadImageFromFile(file);

/// asset 转 ui.Image
ui.Image image = await ImagesMergeHelper.loadImageFromAsset(assetPath);

/// ImageProvider 转 ui.Image
ui.Image image = await ImagesMergeHelper.loadImageFromProvider(imageProvider);

ImageMerge

使用此部件自动合并和显示图片。

ImagesMerge(
  imageList, /// 必须,图片列表
  direction: Axis.vertical, /// 方向
  backgroundColor: Colors.black26, /// 背景颜色
  fit: false, /// 缩放图片以适应其他图片
  controller: captureController, /// 控制器用于获取屏幕截图
)

此外,该部件被包裹在 RepaintBoundary 中,您可以简单地传递一个 CaptureController 的实例,并通过调用 capture() 获取屏幕截图。

/// 通过 RepaintBoundary 获取部件的捕获
getCapture() async {
  Uint8List bytes = await captureController.capture();
}

许可证

MIT 许可证


以下是完整的示例代码:

import 'package:example/helper_page.dart';
import 'package:example/widget_page.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Example Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            RaisedButton(
                onPressed: _toWidget,
                child: Text(
                  "ImagesMerge Widget",
                  style: Theme.of(context).textTheme.title,
                )),
            SizedBox(
              height: 30,
            ),
            RaisedButton(
                onPressed: _toHelper,
                child: Text(
                  "ImagesMerge Helper",
                  style: Theme.of(context).textTheme.title,
                )),
          ],
        ),
      ),
    );
  }

  _toWidget() {
    Navigator.push(context,
        MaterialPageRoute(builder: (context) => ImagesMergeWidgetPage()));
  }

  _toHelper() {
    Navigator.push(context,
        MaterialPageRoute(builder: (context) => ImagesMergeHelperPage()));
  }
}

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

1 回复

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


merge_images 是一个用于在 Flutter 中合并多张图片的插件。它允许你将多张图片按照指定的布局合并成一张图片。以下是使用 merge_images 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  merge_images: ^1.0.3  # 请确保使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 merge_images 包:

import 'package:merge_images/merge_images.dart';

3. 合并图片

使用 mergeImages 函数来合并多张图片。你可以指定图片的路径、布局、宽度、高度等参数。

void mergeAndSaveImages() async {
  // 图片路径列表
  List<String> imagePaths = [
    'assets/image1.png',
    'assets/image2.png',
    'assets/image3.png',
  ];

  // 合并图片
  Uint8List? mergedImage = await MergeImages.multi(
    imagePaths,
    direction: Axis.horizontal, // 图片排列方向,可以是 horizontal 或 vertical
    width: 300, // 合并后图片的宽度
    height: 200, // 合并后图片的高度
  );

  if (mergedImage != null) {
    // 将合并后的图片保存到文件
    final directory = await getApplicationDocumentsDirectory();
    final filePath = '${directory.path}/merged_image.png';
    final file = File(filePath);
    await file.writeAsBytes(mergedImage);

    print('图片已保存到: $filePath');
  } else {
    print('图片合并失败');
  }
}

4. 处理权限

如果你需要将合并后的图片保存到设备上,确保你已经处理了文件写入权限。在 AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在 iOS 上,不需要额外的权限配置。

5. 运行代码

调用 mergeAndSaveImages 函数来合并图片并保存到设备上。

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Merge Images Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: mergeAndSaveImages,
            child: Text('Merge and Save Images'),
          ),
        ),
      ),
    );
  }
}
回到顶部