广告
返回顶部
首页 > 资讯 > 移动开发 >利用Flutter实现背景图片毛玻璃效果实例
  • 379
分享到

利用Flutter实现背景图片毛玻璃效果实例

2024-04-02 19:04:59 379人浏览 八月长安
摘要

目录前言使用 canvas 绘制图片更改绘制图片的绘制范围毛玻璃效果实现总结前言 继续我们绘图相关篇章,这次我们来看看如何使用 CustomPaint 实现毛玻璃背景图效果。毛玻璃背

前言

继续我们绘图相关篇章,这次我们来看看如何使用 CustomPaint 实现毛玻璃背景图效果。毛玻璃背景图其实就是将图片进行一定程度的模糊,背景图经过模糊后更加虚幻,使得前景和后景就会有层次感。相比直接加蒙层的效果来说,毛玻璃看起来更加好看一些。下面是背景图处理前后的对比,我们的前景图片的透明度并没有改变,但是背景图模糊虚化后,感觉前景更加显眼了一样。

本篇涉及如下内容:

  • 使用 canvas 绘制图片。
  • 绘制图片时如何更改图片的填充范围。
  • 使用 ImageFilter 模糊图片,实现毛玻璃效果。

使用 canvas 绘制图片

Fluttercanvas 提供了drawImage 方法用于绘制图片,方法定义如下:

void drawImage(Image image, Offset offset, Paint paint)

其中各个参数说明如下:

  • imagedart:ui 中的 Image 对象,注意不是Widget 中的 Image,因此绘制的时候需要将图片资源转换为 ui.Image 对象。下面是转换的示例代码,fillImage 即最终得到的 ui.Image 对象。注意转换需要一定的时间,因此需要使用异步 async / await 操作。
Future<void> init() async {
  final ByteData data = await rootBundle.load('images/island-coder.png');
  fillImage = await loadImage(Uint8List.view(data.buffer));
}

Future<ui.Image> loadImage(Uint8List img) async {
  final Completer<ui.Image> completer = Completer();
  ui.decodeImageFromList(img, (ui.Image img) {
    setState(() {
      isImageLoaded = true;
    });
    return completer.complete(img);
  });
  return completer.future;
}
  • offset:绘制图片的起始位置。
  • paint:绘图画笔对象,在 paint 上可以应用各种处理效果,比如本篇要用到的图片模糊效果。

注意,drawImage 方法无法更改图片绘制的区域大小,默认就是按图片的实际尺寸绘制的,所以如果要想保证全屏的背景图,我们就需要使用另一个绘制图片的方法。

更改绘制图片的绘制范围

Flutter 的 canvas 为绘制图片提供了一个尺寸转换方法,即可以通过指定原绘制区域的矩形和目标区域的矩形,将图片某个区域映射到新的矩形框中绘制。也就是我们甚至可以实现绘制图片的局部区域。该方法名为 drawImageRect,定义如下:

void drawImageRect(Image image, Rect src, Rect dst, Paint paint)

方法的参数比较容易懂,我们来看看 Flutter 的文档说明。

Draws the subset of the given image described by the src argument into the canvas in the axis-aligned rectangle given by the dst argument. 翻译:通过 src 参数将给定图片的局部(subset)绘制到坐标轴对齐的目标矩形区域内。

下面是我们将源矩形框设置为实际图片的尺寸和一半宽高的对比图,可以看到取一半宽高的只绘制了左上角的1/4区域。实际我们可以定位起始位置来截取部分区域绘制。

毛玻璃效果实现

毛玻璃效果实现和我们上两篇使用 paintshader属性有点类似,Paint 类提供了一个imageFilter属性专门用于图片处理,其中dart:ui 中就提供了ui.ImageFilter.blur方法构建模糊效果处理的 ImageFilter对象。方法定义如下:

factory ImageFilter.blur({ 
  double sigmaX = 0.0, 
  double sigmaY = 0.0, 
  TileMode tileMode = TileMode.clamp 
})

这个方法实际调用的是一个高斯模糊处理器,高斯模糊其实就是应用一个方法将像素点周边指定范围的值进行处理,进而实现模糊效果,有兴趣的可以自行百度一下。下面的 sigmaXsigmaY 分布代表横轴方向和纵轴方向的模糊程度,数值越大,模糊程度越厉害。因此我们可以通过这两个参数控制模糊程度。

return _GaussianBlurImageFilter(
  sigmaX: sigmaX, 
  sigmaY: sigmaY, 
  tileMode: tileMode
);

**注意,这里 sigmaX 和 sigmaY 不能同时为0,否则会报错!**这里应该是如果同时为0会导致除0操作。 下面来看整体的绘制实现代码,如下所示:

class BlurImagePainter extends CustomPainter {
  final ui.Image bgImage;
  final double blur;

  BlurImagePainter({
    required this.bgImage,
    required this.blur,
  });
  @override
  void paint(Canvas canvas, Size size) {
    var paint = Paint();
    // 模糊的取值不能为0,为0会抛异常
    if (blur > 0) {
      paint.imageFilter = ui.ImageFilter.blur(
        sigmaX: blur,
        sigmaY: blur,
        tileMode: TileMode.mirror,
      );
    }

    canvas.drawImageRect(
      bgImage,
      Rect.fromLTRB(0, 0, bgImage.width.toDouble(), bgImage.height.toDouble()),
      Offset.zero & size,
      paint,
    );
  }

代码其实很短,就是在模糊值不为0的时候,应用 imageFilter 进行模糊处理,然后使用 drawImageRect 方法确保图片填充满整个背景。完整代码已经提交至:绘图相关代码,文件名为:blur_image_demo.dart。变换模糊值的效果如下动图所示。

总结

本篇介绍了使用 CustomPaint 实现背景图模糊,毛玻璃的效果。关键点在于 使用 Paint 对象的 imageFilter属性,使用高斯模糊应用到图片上。以后碰到需要模糊背景图的地方就可以直接上手用啦!

到此这篇关于利用Flutter实现背景图片毛玻璃效果的文章就介绍到这了,更多相关Flutter背景图片毛玻璃内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Flutter实现背景图片毛玻璃效果实例

本文链接: https://www.lsjlt.com/news/152620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用Flutter实现背景图片毛玻璃效果实例
    目录前言使用 canvas 绘制图片更改绘制图片的绘制范围毛玻璃效果实现总结前言 继续我们绘图相关篇章,这次我们来看看如何使用 CustomPaint 实现毛玻璃背景图效果。毛玻璃背...
    99+
    2022-11-13
  • Android中怎么实现毛玻璃背景效果
    这篇文章给大家介绍Android中怎么实现毛玻璃背景效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。思路:     1.使用findViewByid获得需要设置毛玻璃的控件。&...
    99+
    2023-05-30
    android
  • Android模糊处理实现图片毛玻璃效果
    本文实例讲解了Android 虚化图片、模糊图片、图片毛玻璃效果的实现方法,具体内容如下 效果如图: 在Android可以用RenderScript方便的实现这个方法: ...
    99+
    2022-06-06
    图片 毛玻璃 Android
  • CSS3如何实现磨砂玻璃背景效果
    这篇文章主要为大家展示了“CSS3如何实现磨砂玻璃背景效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS3如何实现磨砂玻璃背景效果”这篇文章吧。效果图及实...
    99+
    2022-10-19
  • flutter实现磨砂玻璃效果实例详解
    目录flutter 中实现磨砂玻璃效果编写代码输出效果flutter 中实现磨砂玻璃效果 磨砂玻璃效果是一个很酷的用户界面概念,使我们的用户界面看起来更有吸引力。它基本上是一个模糊的...
    99+
    2022-11-13
    flutter 磨砂玻璃 flutter 磨砂
  • Opencv 马赛克和毛玻璃效果与图片融合的实现
    目录1.马赛克效果2. 毛玻璃效果3. 图片的融合算法实现1.马赛克效果 马赛克的基本原理就是,用某一个区域的某一个像素点替代这个区域所有的像素点,从而导致图片出现模糊的效果,如下...
    99+
    2022-11-12
  • 怎么用CSS3实现毛玻璃模糊效果
    这篇文章主要介绍“怎么用CSS3实现毛玻璃模糊效果”,在日常操作中,相信很多人在怎么用CSS3实现毛玻璃模糊效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用CSS3实...
    99+
    2022-10-19
  • Qt实现简易毛玻璃效果的示例代码
    目录现有功能运行结果源码frosted_glass_label.hfrosted_glass_label.cppmain.cpp现有功能 1.用模糊功能实现简易的毛玻璃效果。 2.鼠...
    99+
    2022-11-13
  • 怎么实现Opencv马赛克和毛玻璃效果与图片融合
    这篇文章主要介绍“怎么实现Opencv马赛克和毛玻璃效果与图片融合”,在日常操作中,相信很多人在怎么实现Opencv马赛克和毛玻璃效果与图片融合问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现Openc...
    99+
    2023-06-25
  • 如何利用CSS如何实现全兼容的毛玻璃效果
    这篇文章主要讲解了“如何利用CSS如何实现全兼容的毛玻璃效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用CSS如何实现全兼容的毛玻璃效果”吧!通过...
    99+
    2022-10-19
  • 如何使用纯CSS实现底层毛玻璃效果
    这篇“如何使用纯CSS实现底层毛玻璃效果”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“如何使用纯CSS实现底层毛玻璃效果”,小编整理了以下知识点,请大家跟着小...
    99+
    2022-10-19
  • Android 实现图片模糊、高斯模糊、毛玻璃效果的三种方法
    在前几天写过一个使用glide-transformations的方法实现高斯模糊的方法,今天偶然间有发现一个大神写的另一个方法,感觉挺不错的,分享一下: 效果图: 原文链接:...
    99+
    2022-06-06
    方法 图片 高斯 高斯模糊 毛玻璃 Android
  • 怎么用html5 canvas实现图片玻璃碎片特效
    本篇内容主要讲解“怎么用html5 canvas实现图片玻璃碎片特效”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用html5 canvas实现图片玻璃碎片...
    99+
    2022-10-19
  • 如何在Android中使用RenderScript实现一个毛玻璃模糊效果
    今天就跟大家聊聊有关如何在Android中使用RenderScript实现一个毛玻璃模糊效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。RenderScript 介绍在开始之前,先...
    99+
    2023-05-31
    android renderscript ers
  • 如何使用html5 canvas实现图片玻璃碎片特效
    小编给大家分享一下如何使用html5 canvas实现图片玻璃碎片特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2022-10-19
  • Python利用matplotlib生成图片背景及图例透明的效果
    前言 最近工作中遇到一个需求,在使用matplotlib生成图片,想要背景透明,而且图例部分也显示透明效果,通过查找相关资料找到了大概的设置方法,特此记录,方便自己或者有需要的朋友们参考学习。 示例代码 ...
    99+
    2022-06-04
    图例 透明 背景
  • 利用CSS实现背景图像的平铺效果
    利用CSS实现背景图像的平铺效果在网页设计中,背景图像的平铺效果是常见的设计需求。通过CSS可以轻松地实现背景图像的平铺效果,本文将介绍一些常用的实现方法,并附上具体的代码示例。一、重复平铺(repeat)最简单的背景图像平铺方式是通过re...
    99+
    2023-11-21
    CSS 背景图像 平铺
  • CSS怎么实现背景渐变图片过渡效果
    这篇文章主要介绍“CSS怎么实现背景渐变图片过渡效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS怎么实现背景渐变图片过渡效果”文章能帮助大家解决问题。一、b...
    99+
    2022-10-19
  • 利用Python中​Rembg库实现去除图片背景
    目录安装快速上手命令行调用在Python中使用Python 的 Rembg 库可以去掉图片中的背景,效果如下: 安装 CPU版 pip install rembg  GP...
    99+
    2022-11-11
  • Android编程实现图片背景渐变切换与图层叠加效果
    本文实例讲述了Android编程实现图片背景渐变切换与图层叠加效果。分享给大家供大家参考,具体如下: 本例要实现的目的: 1.图片背景渐变的切换,例如渐变的从红色切换成绿色。 ...
    99+
    2022-06-06
    图片 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作