Flutter图像特效插件f_glitch的使用

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

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,
            ),
          ]),
        ),
      ),
    );
  }
}

使用说明

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      f_glitch: ^0.1.1
    
  2. 在 Dart 文件中初始化插件并设置图像提供者:


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

1 回复

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


当然,以下是如何在Flutter项目中使用f_glitch插件来实现图像特效的示例代码。f_glitch是一个Flutter插件,它允许你向图像添加各种故障艺术(glitch)效果。

首先,确保你的Flutter项目已经创建并配置好了。然后,按照以下步骤操作:

  1. 添加依赖项: 在你的pubspec.yaml文件中添加f_glitch依赖项:

    dependencies:
      flutter:
        sdk: flutter
      f_glitch: ^最新版本号  # 请替换为实际可用的最新版本号
    

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

  2. 导入插件: 在你需要使用图像特效的Dart文件中导入f_glitch插件:

    import 'package:f_glitch/f_glitch.dart';
    
  3. 使用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对象,用于提供要应用特效的图像。你可以使用NetworkImageAssetImage等。
    • effectType:一个GlitchEffectType枚举值,指定要应用的故障艺术效果类型。f_glitch插件提供了多种效果类型,如randomstaticscanlines等。
    • animationDuration:动画的持续时间。
    • loop:一个布尔值,指示动画是否应该循环播放。
  4. 运行你的应用: 确保你的开发环境已经正确配置,然后运行你的Flutter应用。你应该能够看到带有故障艺术效果的图像。

这个示例展示了如何在Flutter项目中使用f_glitch插件来应用图像特效。你可以根据需要调整参数,以达到你想要的视觉效果。

回到顶部