Flutter图片格式支持插件webp的使用

Flutter图片格式支持插件webp的使用

webp 是一个用于将图像转换为WebP格式的资源转换器。

webp pub.dev badge

flutter:
  assets:
    - path: assets/logo.jpg
      transformers:
        - package: webp

安装插件

pubspec.yaml 文件中添加插件:

flutter pub add webp

包的使用

pubspec.yaml 文件中配置资产:

flutter:
  assets:
    - path: assets/logo.jpg
      transformers:
        - package: webp

默认用法

如果没有添加额外参数,默认质量参数值为75,使用有损压缩。

flutter:
  assets:
    - path: assets/logo.jpg
      transformers:
        - package: webp

使用参数

可以通过传递参数来自定义转换过程。例如,设置质量为65,提示为图形,并启用自动过滤。

flutter:
  assets:
    - path: assets/logo.jpg
      transformers:
        - package: webp
          args: ['--quality=65', '--hint=graph', '--af']

还可以指定系统路径中的 cwebp 可执行文件。

flutter:
  assets:
    - path: assets/logo.jpg
      transformers:
        - package: webp
          args: ['--from_path']

cwebp 参数

以下是 cwebp 的一些常用参数:

  • -q, --quality: 设置输出图像的质量因子。取值范围为0到100,100表示最高质量。例如,--quality=80
  • --lossless: 无损编码。对于完全透明区域的不可见像素值(R/G/B或Y/U/V),只有在使用了 --exact 选项时才会保留。
  • -m, --method: 设置压缩方法。取值可以是 0(最快),1(默认),2(最慢),3(最佳质量)。例如,--method=2
  • -f, --filter: 设置滤波强度。取值范围为0到100,0表示不滤波,100表示最大滤波。例如,--filter=50
  • -s, --size: 设置输出图像的目标大小(以字节为单位)。例如,--size=500000

有关完整参数列表及其描述,请参阅 cwebp 文档

支持的架构

该包提供了以下架构的 cwebp 二进制文件:

  • windows-x64
  • macos-x64
  • macos-arm64
  • linux-x64
  • linux-arm64

注意:你也可以在其他架构上使用从 $PATH 中指定的 cwebp

示例代码

以下是一个简单的示例,展示如何在 Flutter 应用程序中使用 webp 插件。

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

class _MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('cwebp usage example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [Image.asset('assets/images/example_image.png')],
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter中,使用webp格式的图片可以通过第三方插件来实现。一个常用的插件是flutter_webp,不过需要注意的是,从Flutter 2.5开始,官方已经内置了对webp格式的支持,因此通常不需要额外安装插件。

下面是如何在Flutter项目中直接使用webp图片的示例代码,假设你已经在项目中有一个名为example.webp的图片文件。

1. 将webp图片添加到项目中

将你的webp图片文件(例如example.webp)添加到assets文件夹中,并在pubspec.yaml文件中声明它:

flutter:
  assets:
    - assets/example.webp

2. 在代码中使用webp图片

你可以使用Image.assetImage.network来加载并显示webp图片。

从本地资源加载webp图片

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter WebP Example'),
        ),
        body: Center(
          child: Image.asset('assets/example.webp'),
        ),
      ),
    );
  }
}

从网络加载webp图片

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter WebP Network Example'),
        ),
        body: Center(
          child: Image.network('https://example.com/path/to/your/image.webp'),
        ),
      ),
    );
  }
}

注意事项

  • 确保你的Flutter SDK版本至少是2.5或更高,以利用内置的webp支持。
  • 如果你正在使用旧版本的Flutter,并且需要支持webp,可以考虑使用flutter_webp插件,但通常升级到较新的Flutter版本会是更好的选择。
  • 对于从网络加载的图片,确保URL指向的是有效的webp格式图片。

通过上述方法,你应该能够在Flutter项目中顺利加载和显示webp格式的图片。

回到顶部