Flutter插件dqoi的使用_dqoi 是一个 Dart 实现的 “Quite OK Image Format” 插件
Flutter插件dqoi的使用_dqoi 是一个 Dart 实现的 “Quite OK Image Format” 插件
dqoi
是一个 Dart 实现的 “Quite OK Image Format” 插件。它提供了命令行接口和库,可以在应用程序中使用。
支持我
我目前还是未成年人,在英国上学。我利用课余时间来开发这个项目和其他项目,但因为我还未成年,目前没有稳定的收入来源。未来我希望能从事软件或移动应用开发工作。如果你愿意支持我,哪怕是一点点帮助也十分感激。每一份捐赠都会给我继续开发的动力,并让我知道我在做正确的事情。我会在文档网站上为捐赠者提供致谢,并在每个版本的发布说明中提及他们。
你可以通过以下方式支持我:
-
GitHub 赞助:访问我的 GitHub 赞助页面,在那里可以进行捐赠。
-
Ko-fi:如果你更喜欢这种方式,可以使用我的 Ko-fi 页面 进行捐赠。注意,PayPal 后端会收取少量费用。
命令行接口
提供了一个易于使用的命令行接口来处理 QOI 文件。
安装
使用 Dart(推荐)
如果你已经安装了 Dart,那么你可以在任何操作系统上使用命令行工具。
dart pub global activate dqoi
然后你可以在系统中的任何地方使用 dqoi
命令。
不使用 Dart
如果未安装 Dart,可以通过以下步骤获取预编译的可执行文件。
Windows
你可以通过以下方式获取 .exe
文件:
- 克隆此存储库并转到
bin/dqoi.exe
- 或从 GitHub 存储库浏览器下载:dqoi.exe
注意,Windows 防火墙或防病毒软件可能会将该可执行文件标记为恶意软件或不需要的程序,因为它未签名。如果发生这种情况,你需要为程序添加例外。
将此文件添加到系统路径中,然后你可以在系统中的任何地方使用 dqoi
命令。
其他操作系统
不幸的是,当前无法为其他操作系统提供可执行文件,因为没有适当的设备。最好的方法是安装 Dart,然后按照上述 Dart 的安装步骤操作。
命令行使用
你可以通过运行 dqoi
并不带参数或带有 --help
参数来列出可用选项。程序会在出现错误时返回有用的提示信息。在 Windows 上,dqoi-test.bat
可用于测试程序,比较输出文件与官方样本。这并不是必须运行的,但它可以帮助验证程序是否正常工作。如果测试失败,控制台将显示差异。
应用程序库
有两个包含库,它们非常相似:
- Flutter 应用程序应使用标准导入:
package:dqoi/dqoi.dart
- 非 Flutter 程序应使用
package:dqoi/dqoi_pure.dart
导入,这排除了一些仅限 Flutter 的有用方法。
注意,两个库都导出了 Channels
枚举,但你可以通过在导入语句末尾添加 hide Channels
来禁用此功能。另外,这两个库都不使用 dart:io
,因此它们完全兼容 Web 应用程序。
当此文档提到单个“库”时,它指的是任何一个库。
库使用
QOI
类提供了在二进制、PNG 和 QOI 格式之间转换的功能。当扩展 FlutterQOIExts
时,它还提供了一种在 Flutter 应用程序中高效渲染/绘制 QOI 图像的简单方法。
完整的 API 文档可以在 这里 查看。
示例
你可以构建并安装示例应用程序,位于 example/
目录下。以下是几个快速有用的代码片段来帮助你入门。
将 PNG 文件转换为 QOI 并写入另一个文件
await outputFile.writeAsBytes(QOI.fromPNG(await inputFile.readAsBytes()).toQOI());
渲染/绘制 QOI 文件到一个 widget
return QOI.fromQOI(await inputFile.readAsBytes()).toImageWidget(loadingWidget: loadingWidget);
渲染/绘制 QOI 资源(捆绑)到一个 widget
Future<Uint8List> loadAsset(String path) async => (await rootBundle.load(path)).buffer.asUint8List();
return QOI.fromQOI(loadAsset('assetPath.qoi')).toImageWidget(loadingWidget: loadingWidget);
常见问题
-
如何发音这个库的名字?
- 由你自己决定,但我最喜欢发音为“decoy”。
-
这是一个好的实现吗?
- 输出的 QOI 文件完美匹配官方 C 实现的输出。任何重新编码的 PNG 文件可能不会逐字节匹配,但像素始终是正确的。
-
是否有不同语言的其他实现?
- 当然有!你可以在 官方 README 中查看所有可用的端口。
示例代码
下面是示例代码:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:dqoi/dqoi.dart';
import 'load_asset.dart';
void main() {
runApp(const DemoAppContainer());
}
class DemoAppContainer extends StatelessWidget {
const DemoAppContainer({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'dqoi Demo Application',
theme: ThemeData(
primarySwatch: Colors.orange,
),
home: const MainPage(),
);
}
}
class MainPage extends StatelessWidget {
const MainPage({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('dqoi Demo Application'),
),
body: Center(
child: FutureBuilder<List<Uint8List>>(
future: Future.wait([
loadAsset('assets/images/kodim23.qoi'),
loadAsset('assets/images/dice.qoi'),
loadAsset('assets/images/testcard_rgba.qoi'),
]),
builder: (context, assets) {
if (!assets.hasData) {
return const CircularProgressIndicator();
}
return ListView.builder(
itemBuilder: (context, i) => Container(
child: QOI.fromQOI(assets.data![i]).toImageWidget(),
color: Colors.black.withOpacity(0.5),
),
itemCount: assets.data!.length,
);
},
),
),
);
}
}
更多关于Flutter插件dqoi的使用_dqoi 是一个 Dart 实现的 “Quite OK Image Format” 插件的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件dqoi的使用_dqoi 是一个 Dart 实现的 “Quite OK Image Format” 插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
针对您提到的Flutter中未知功能插件 dqoi
的使用问题,由于该插件的具体功能和API未明确定义(介绍为undefined),我无法直接提供具体的功能实现代码。不过,我可以展示一个通用的Flutter插件使用框架,您可以根据这个框架尝试集成并使用 dqoi
插件,前提是您需要查阅该插件的官方文档或源代码以了解其实际功能和API。
以下是一个Flutter插件使用的通用示例框架,您可以参考并根据 dqoi
插件的实际API进行调整:
-
在
pubspec.yaml
文件中添加依赖首先,您需要在项目的
pubspec.yaml
文件中添加对dqoi
插件的依赖。请注意,由于这是一个假设的插件名称,您需要用实际的插件名称和版本号替换它。dependencies: flutter: sdk: flutter dqoi: ^x.y.z # 替换为实际的插件名称和版本号
-
导入插件并初始化
在您的Dart代码中,导入插件并进行必要的初始化。由于我们不知道
dqoi
插件的具体初始化方式,以下代码仅为示例,您需要根据实际API进行调整。import 'package:flutter/material.dart'; import 'package:dqoi/dqoi.dart'; // 假设这是插件的导入路径 void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override void initState() { super.initState(); // 假设dqoi插件有一个初始化方法叫做initialize Dqoi.initialize().then((result) { // 初始化成功后的处理 print('dqoi initialized with result: $result'); }).catchError((error) { // 初始化失败的处理 print('Failed to initialize dqoi: $error'); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter dqoi Demo'), ), body: Center( child: Text('Check console for dqoi initialization status.'), ), ); } }
-
使用插件功能
一旦插件初始化成功,您可以根据插件提供的API来使用其功能。由于我们不知道
dqoi
插件的具体功能,以下代码仅为假设示例:void someFunction() async { try { // 假设dqoi插件有一个叫做performUnknownFunction的方法 var result = await Dqoi.performUnknownFunction(parameters: {/* 参数 */}); print('Result of performUnknownFunction: $result'); } catch (error) { print('Error performing unknown function: $error'); } }
请注意,上述代码中的Dqoi.initialize()
、Dqoi.performUnknownFunction()
等方法和参数都是假设的,您需要根据dqoi
插件的实际API文档进行替换和调整。
由于dqoi
插件的具体信息未知,我建议您查阅该插件的官方文档、GitHub仓库或相关社区论坛,以获取准确的API信息和用法示例。如果您有具体的错误信息或需求,也可以提供出来,以便进行更具体的帮助。