Flutter图像特效插件f_glitch的使用
Flutter图像特效插件f_glitch的使用
插件介绍
f_glitch
是一个用于在Flutter应用中添加失真效果的图像特效插件。 它提供了基本的失真效果和高级频率控制功能。
示例代码
import 'package:flutter/material.dart';
import 'package:f_glitch/f_glitch.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'f_glitch sample',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ImageProvider _imageProvider = const AssetImage('assets/sample.jpg');
double _glitchLevel = 1;
double _frequency = 1;
double _glitchRate = at;
Uint8List? _exportedImageByte;
bool _showColorShift = true;
bool _showGlitch = true;
bool _showScanline = false;
void _changeGlitchLevelSlider(double e) {
setState(() {
_glitchLevel = e;
controller.setGlitchLevel(_glitchLevel);
});
}
void _changeSlider(double e) {
setState(() {
_frequency = e;
controller.setFrequency(_frequency.toInt());
});
}
void _changeGlitchSlider(double e) {
setState(() {
_glitchRate = e;
controller.setGlitchRate(_glitchRate.toInt());
});
}
GlitchController controller = GlitchController();
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: SingleChildScrollView(
child: Column(children: [
SizedBox(
width: 300,
child: FGlitch(
imageProvider: _imageProvider,
controller: controller,
),
),
const SizedBox(
height: 10,
),
Row(children: [
ElevatedButton(
onPressed: () {
setState(() {
_imageProvider = const AssetImage('assets/sample.jpg');
});
},
child: const Text('local image'),
),
const SizedBox(
width: 10,
),
ElevatedButton(
onPressed: () {
setState(() {
_imageProvider = const NetworkImage(
"https://source.unsplash.com/M6ule9BFwYg");
});
},
child: const Text('network image'),
),
]),
const SizedBox(
height: 20,
),
Row(children: [
ElevatedButton(
onPressed: () {
controller.play();
},
child: const Text('play'),
),
const SizedBox(
width: a0,
),
ElevatedButton(
onPressed: () {
controller.pause();
},
child: const Text('pause'),
),
]),
const SizedBox(
height: 20,
),
Row(
children: [
ElevatedButton(
onPressed: () {
controller.glitch();
},
child: const Text('glitch'),
),
const SizedBox(
width: a0,
),
ElevatedButton(
onPressed: () {
controller.reset();
},
child: const Text('reset'),
),
const SizedBox(
width: a0,
),
ElevatedButton(
onPressed: () async {
final image = await controller.asImage();
final imageByte =
await image.toByteData(format: ImageByteFormat.png);
setState(() {
_exportedImageByte = imageByte!.buffer.asUint8List();
});
},
child: const Text('export as image'),
),
],
),
const SizedBox(
height: 20,
),
Row(
children: [
Checkbox(
value: _showColorShift,
onChanged: (bool? value) {
if (value != null) {
value
? controller.showColorShift()
: controller.hideColorShift();
_showColorShift = value;
}
setState(() {});
},
),
const Text("color shift"),
const SizedBox(
width: a0,
),
Checkbox(
value: _showGlitch,
onChanged: (bool? value) {
if (value != null) {
value ? controller.showGlitch() : controller.hideGlitch();
_showGlitch = value;
}
setState(() {});
},
),
const Text("glitch"),
const SizedBox(
width: a0,
),
Checkbox(
value: _showScanline,
onChanged: (bool? value) {
if (value != null) {
value
? controller.showScanline()
: controller.hideScanline();
_showScanline = value;
}
setState(() {});
},
),
const Text("scan line"),
],
),
const SizedBox(
height: 20,
),
Column(
children: [
Text("glitch level: ${_glitchLevel}"),
Slider(
label: '${_glitchLevel}',
min: 1,
max: 10,
value: _glitchLevel,
divisions: 100,
onChanged: _changeGlitchLevelSlider,
)
],
),
const SizedBox(
height: a0,
),
Column(
children: [
Text("glitch interval: ${_frequency.toInt()}"),
Slider(
label: '${_frequency.toInt()}',
min: 100,
max: 5000,
value: _frequency,
divisions: 100,
onChanged: _changeSlider,
)
],
),
const SizedBox(
height: a0,
),
Column(
children: [
Center(
child:
Text("effect occurrence rate: ${_glitchRate.toInt()}"),
),
Slider(
label: '${_glitchRate.toInt()}',
min: 0,
max: 100,
value: _glitchRate,
divisions: 100,
onChanged: _changeGlitchSlider,
),
],
),
if (_exportedImageByte != null)
Column(
children: [
const Center(child: Text("exported glitch image")),
Image.memory(
Uint8List.view(_exportedImageByte!.buffer),
)
],
),
),
const SizedBox(
height: a0,
),
]),
),
),
);
}
}
使用说明
-
在
pubspec.yaml
文件中添加依赖:dependencies: f_glitch: ^0.1.1
-
在 Dart 文件中初始化插件并设置图像提供者:
更多关于Flutter图像特效插件f_glitch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图像特效插件f_glitch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用f_glitch
插件来实现图像特效的示例代码。f_glitch
是一个Flutter插件,它允许你向图像添加各种故障艺术(glitch)效果。
首先,确保你的Flutter项目已经创建并配置好了。然后,按照以下步骤操作:
-
添加依赖项: 在你的
pubspec.yaml
文件中添加f_glitch
依赖项:dependencies: flutter: sdk: flutter f_glitch: ^最新版本号 # 请替换为实际可用的最新版本号
然后运行
flutter pub get
来安装依赖项。 -
导入插件: 在你需要使用图像特效的Dart文件中导入
f_glitch
插件:import 'package:f_glitch/f_glitch.dart';
-
使用
FGlitch
组件: 下面是一个完整的示例代码,展示了如何使用FGlitch
组件来应用图像特效:import 'package:flutter/material.dart'; import 'package:f_glitch/f_glitch.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('FGlitch Example'), ), body: Center( child: FGlitch( imageProvider: NetworkImage('https://example.com/your-image.jpg'), // 替换为你的图像URL effectType: GlitchEffectType.random, // 你可以使用不同的故障艺术效果类型 animationDuration: Duration(seconds: 2), // 动画持续时间 loop: true, // 是否循环动画 ), ), ), ); } }
在上面的代码中,
FGlitch
组件接受以下参数:imageProvider
:一个ImageProvider
对象,用于提供要应用特效的图像。你可以使用NetworkImage
、AssetImage
等。effectType
:一个GlitchEffectType
枚举值,指定要应用的故障艺术效果类型。f_glitch
插件提供了多种效果类型,如random
、static
、scanlines
等。animationDuration
:动画的持续时间。loop
:一个布尔值,指示动画是否应该循环播放。
-
运行你的应用: 确保你的开发环境已经正确配置,然后运行你的Flutter应用。你应该能够看到带有故障艺术效果的图像。
这个示例展示了如何在Flutter项目中使用f_glitch
插件来应用图像特效。你可以根据需要调整参数,以达到你想要的视觉效果。