Flutter图片处理插件nex_image的使用

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

Flutter 图片处理插件 NexImage 的使用

NexImage 是一个 Flutter 小部件,用于简化多种格式图像的渲染和动画支持。该库能够自动检测并呈现来自资源文件和网络源的不同图像格式,还支持 Lottie 动画、高效加载网络图像,并可以将 PDF 转换为图像。

特性

  • 自动资源图像检测:轻松地从资源文件中检测并呈现不同格式的图像。
  • Lottie 动画支持:可以从资源文件和网络 URL 显示 Lottie 动画。
  • 网络图像支持:通过 CachedNetworkImage 高效加载网络图像,以优化缓存和性能。
  • PDF 转换为图像:将 PDF 的第一页转换为图像以快速显示。
  • 多种图像扩展支持:支持包括 SVG、PNG、BMP、GIF、WEBP、TIFF、HEIC 在内的多种图像格式。

截图

Example

安装

pubspec.yaml 文件中添加 nex_image

dependencies:
  nex_image: ^1.0.0

然后运行:

flutter pub get

使用

以下是如何使用 NexImage 小部件来显示不同类型图像的示例:

显示资源图像

import 'package:nex_image/nex_image.dart';

Column(
  children: [
    Text('PNG Image'),
    NexImage.asset(
      imagePath: 'assets/images/sample.png',
    ),
  ],
);

显示网络图像

import 'package:nex_image/nex_image.dart';

Column(
  children: [
    Text('Network Image'),
    NexImage.network(
      imageUrl: 'https://example.com/sample.jpg',
    ),
  ],
);

显示 Lottie 动画

从资源文件

import 'package:nex_image/nex_image.dart';

Column(
  children: [
    Text('Lottie Animation from Assets'),
    NexImage.lottie(
      imagePath: 'assets/animations/sample.json',
      repeat: true,
    ),
  ],
);

从网络

import 'package:nex_image/nex_image.dart';

Column(
  children: [
    Text('Lottie Animation from Network'),
    NexImage.lottie(
      imagePath: 'https://example.com/animation.json',
      repeat: true,
    ),
  ],
);

显示 PDF 作为图像

import 'package:nex_image/nex_image.dart';

Column(
  children: [
    Text('PDF as Image'),
    NexImage.asset(
      imagePath: 'assets/pdfs/sample.pdf',
    ),
  ],
);

支持的图像格式

  • SVG:可缩放矢量图形
  • PNG:便携式网络图形
  • BMP:位图图像文件
  • GIF:图形交换格式(支持动画)
  • WEBP:WebP 图像格式
  • TIFF:标记图像文件格式
  • HEIC:高效图像编码
  • PDF:显示 PDF 的第一页作为图像
  • 网络图像:任何标准图像格式的 URL
  • Lottie 动画:基于 JSON 的动画

贡献

欢迎贡献!请随时提交问题或拉取请求。

许可证

该项目采用 MIT 许可证。详情请参阅 LICENSE 文件。


完整示例代码

以下是完整的示例代码,展示了如何使用 NexImage 来显示多种类型的图像。

import 'package:flutter/material.dart';
import 'package:nex_image/nex_image.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(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'NexImage Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: const SingleChildScrollView(
        child: Wrap(
          spacing: 8,
          runAlignment: WrapAlignment.center,
          alignment: WrapAlignment.center,
          children: <Widget>[
            Column(
              children: [
                Text('SVG'),
                NexImage.asset(
                  imagePath: 'assets/svg/star.svg',
                ),
              ],
            ),
            Column(
              children: [
                Text('PNG'),
                NexImage.asset(
                  imagePath: 'assets/images/star.png',
                ),
              ],
            ),
            Column(
              children: [
                Text('PDF'),
                NexImage.asset(
                  imagePath: 'assets/pdfs/sample.pdf',
                ),
              ],
            ),
            Column(
              children: [
                Text('WEBP'),
                NexImage.asset(
                  imagePath: 'assets/webp/sample.webp',
                ),
              ],
            ),
            Column(
              children: [
                Text('BMP'),
                NexImage.asset(
                  imagePath: 'assets/bmp/sample.bmp',
                ),
              ],
            ),
            Column(
              children: [
                Text('GIF'),
                NexImage.asset(
                  imagePath: 'assets/gif/sample.gif',
                ),
              ],
            ),
            Column(
              children: [
                Text('TIFF'),
                NexImage.asset(
                  imagePath: 'assets/tiff/sample.tiff',
                ),
              ],
            ),
            Column(
              children: [
                Text('HEIC'),
                NexImage.asset(
                  imagePath: 'assets/heic/sample.heic',
                ),
              ],
            ),
            Column(
              children: [
                Text('Network'),
                NexImage.network(
                  imageUrl: 'https://cdn.myanimelist.net/images/anime/1141/142503.jpg',
                ),
              ],
            ),
            Column(
              children: [
                Text('Lottie Network'),
                NexImage.lottie(
                  imagePath: 'https://raw.githubusercontent.com/xvrh/lottie-flutter/master/example/assets/Mobilo/A.json',
                  repeat: true,
                ),
              ],
            ),
            Column(
              children: [
                Text('Lottie Assets'),
                NexImage.lottie(
                  imagePath: 'assets/lottie/sample.json',
                  repeat: true,
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用nex_image插件来处理图片的示例代码。nex_image是一个用于高效加载和处理图片的Flutter插件,它提供了缓存、占位符、错误处理等功能。

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

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

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

以下是一个简单的示例代码,展示了如何使用nex_image来加载和处理图片:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Nex Image Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nex Image Example'),
        ),
        body: Center(
          child: NexImage.network(
            'https://example.com/image.jpg', // 替换为实际图片URL
            width: 300,
            height: 300,
            placeholder: (context, url) => CircularProgressIndicator(), // 占位符
            errorWidget: (context, url, error) => Icon(Icons.error), // 错误处理
            cache: true, // 启用缓存
            fit: BoxFit.cover, // 图片适应方式
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了NexImage.network方法来加载网络图片。你可以根据需要调整widthheightplaceholdererrorWidgetcachefit等参数。

  • widthheight用于设置图片的显示尺寸。
  • placeholder是一个函数,返回一个Widget作为加载图片时的占位符。这里我们使用了CircularProgressIndicator
  • errorWidget是一个函数,返回一个Widget作为加载图片失败时的错误提示。这里我们使用了Icon(Icons.error)
  • cache设置为true以启用图片缓存。
  • fit用于设置图片如何适应其布局容器。

如果你需要加载本地图片,可以使用NexImage.asset方法,示例如下:

NexImage.asset(
  'assets/images/my_image.png', // 替换为你的本地图片路径
  width: 300,
  height: 300,
  placeholder: (context, assetName) => CircularProgressIndicator(),
  errorWidget: (context, assetName, error) => Icon(Icons.error),
  fit: BoxFit.cover,
)

注意,使用本地图片时,你需要在pubspec.yaml文件中声明图片资源:

flutter:
  assets:
    - assets/images/my_image.png # 替换为你的本地图片路径

以上示例展示了如何使用nex_image插件在Flutter项目中加载和处理图片。根据具体需求,你可以进一步自定义和扩展这些功能。

回到顶部