广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS filter与前端滤镜实例分析
  • 526
分享到

CSS filter与前端滤镜实例分析

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

本篇内容介绍了“CSS filter与前端滤镜实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  

本篇内容介绍了“CSS filter与前端滤镜实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  很多网站都换成了灰色调,如淘宝百度掘金知乎等,通过实地考察,灰度的技术无一例外都使用了以下CSS,如淘宝的:

  html {

  -WEBkit-filter: grayscale(100%);

  filter: progid:DXImageTransfORM.Microsoft.BasicImage(grayscale=1);

  }

  第一行对非IE浏览器生效,第二行是对IE浏览器生效(emmm...似乎浏览器就分为两种),本质上都是使用filter的grayscale属性,实现灰阶效果,灰阶是一种常用的图片滤镜。打开PS可以看到多种滤镜可选择:

  而通过CSS的filter能够实现其中的一些滤镜效果,如灰阶,高斯模糊等。

  这个时候你可能会问,网页又不是图片,里面可能会有很多文本,为什么也能应用图片的滤镜呢?实际上网页在渲染到屏幕之前都会被栅格化成canvas位图再画到屏幕上,所以filter处理的就是这张位图。

  通过Chromium源码,我们可以看到相关滤镜的实现,实际上是使用了一个图像矩阵对原始位图进行转换,如下代码所示:

  void GetGrayscaleMatrix(float amount, float matrix[20]) {

  // Note, these values are computed to ensure MatrixNeedsClamping is false

  // for amount in [0..1]

  matrix[0] = 0.2126f + 0.7874f * amount;

  matrix[1] = 0.7152f - 0.7152f * amount;

  matrix[2] = 1.f - (matrix[0] + matrix[1]);

  matrix[3] = matrix[4] = 0.f;

  matrix[5] = 0.2126f - 0.2126f * amount;

  matrix[6] = 0.7152f + 0.2848f * amount;

  matrix[7] = 1.f - (matrix[5] + matrix[6]);

  matrix[8] = matrix[9] = 0.f;

  matrix[10] = 0.2126f - 0.2126f * amount;

  matrix[11] = 0.7152f - 0.7152f * amount;

  matrix[12] = 1.f - (matrix[10] + matrix[11]);

  matrix[13] = matrix[14] = 0.f;

  matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0.f;

  matrix[18] = 1.f;

  }

  这个便为灰阶grayscale的矩阵获取方式,如果CSS传的amount值为1(上面参数的便为1 - amount = 0,代码传参的时候使用了和1的差值),那么将得到以下矩阵:

  这个矩阵便是用来对每个像素点进行转换,假设某个像素点的像素值为rgba(255, 119, 50, 0.5),那么这个像素点转换计算如下:

  (最后的w是一个额外的变换参数,默认值为1,在灰阶变换里面没有用到,所以矩阵的最后一行都为0)

  实际上对RGB每一个的计算为:

  R/G/B = 255 * 0.2126 + 119 * 0.7152 + 50 * 0.0722 = 143

  即使用公式:

  这个其实就是灰阶算法,所谓灰阶例如黑白电视便是像素点只用一个维度表示:浅或深,所以需要把RGB三维数据处理成一维的,最简单的便是取RGB的平均值即可,但更科学的应该是用人眼对三原色的感知程度分配系数,这样能提高对比度。

  那么为什么上面需要用一个矩阵计算呢,实际上统一成一个矩阵有一个显而易见好处是做多重变换的时候,只需要对这个矩阵进行累乘得到一个最终的矩阵即可,类似于transform. 例如可以在灰阶之后再加上棕褐色(sepia)的处理:

  html {

  filter: grayscale(1) sepia(0.5);

  }

  棕褐色的矩阵获取方式为:

  如果灰阶的矩阵为A,棕褐色矩阵为B,那么此次的变换矩阵便为A * B(注意矩阵一般不满足交换律,A * B不等于B *A),如果我们先做棕褐色处理再做灰阶的话,最后的效果就是灰阶的。

  我们发现Direct2D等引擎也是使用的这种方式进行变换,只不过采用的矩阵会有点差异:

  其它相对简单的滤镜如色调旋转(hue-rotate),反相(invert)等都是采用的这种矩阵变换,但是对于高斯模糊(blur)、投影(drop-shadow)等则是需要一些更复杂的算法,在源码里可以看到,高斯模糊是使用Skia的SkBlurImageFilter类做的处理。不管是矩阵还是单独的处理,它们都是继承于PaintFilter.

“CSS filter与前端滤镜实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: CSS filter与前端滤镜实例分析

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

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

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

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

下载Word文档
猜你喜欢
  • CSS filter与前端滤镜实例分析
    本篇内容介绍了“CSS filter与前端滤镜实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2022-10-19
  • Css前端的示例分析
    这篇文章将为大家详细讲解有关Css前端的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、移动端移动端还没有上车。先来总结一下三个基本的移动端开发特性:视口(vi...
    99+
    2022-10-19
  • web前端与后端分离的架构实例分析
    本篇内容主要讲解“web前端与后端分离的架构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前端与后端分离的架构实例分析”吧!一、关于前端的 dat...
    99+
    2022-10-19
  • web前端实例分析
    这篇文章主要介绍了web前端实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端实例分析文章都会有所收获,下面我们一起来看看吧。正文这题的规则是这样的给定有一个 Add 函数,要...
    99+
    2023-06-27
  • CSS3媒介查询与滤镜效果的示例分析
    这篇文章给大家分享的是有关CSS3媒介查询与滤镜效果的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 css3媒介查询 媒介查询(Media Queries)是CSS...
    99+
    2022-10-19
  • 前端ajax与后端交互的示例分析
    这篇文章主要介绍了前端ajax与后端交互的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前端中常常用的与后端交换数据的话,通常是要用...
    99+
    2022-10-19
  • 前端开发之CSS原理的示例分析
    这篇文章主要为大家展示了“前端开发之CSS原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“前端开发之CSS原理的示例分析”这篇文章吧。  一、浏览器...
    99+
    2022-10-19
  • Flask Vue前后端分离实例分析
    这篇文章主要讲解了“Flask Vue前后端分离实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flask Vue前后端分离实例分析”吧!vue官网:开源的 Javascript 框架...
    99+
    2023-07-02
  • 前端html的实例代码分析
    这篇“前端html的实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“前端html...
    99+
    2022-10-19
  • web前端面试题实例分析
    今天小编给大家分享一下web前端面试题实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。面试官:页面导入样式时,使用 l...
    99+
    2023-07-05
  • 微前端qiankun改造实例分析
    本文小编为大家详细介绍“微前端qiankun改造实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“微前端qiankun改造实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。改造过程首先我先用vue2-a...
    99+
    2023-07-02
  • 前端构建CSS预处理器的示例分析
    这篇文章主要介绍前端构建CSS预处理器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mi...
    99+
    2022-10-19
  • Web前端开发css基础样式的示例分析
    小编给大家分享一下Web前端开发css基础样式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!颜色和单位的使用 颜色用颜...
    99+
    2022-10-19
  • 前端react面试题实例代码分析
    这篇“前端react面试题实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“前端react面试题实例代码分析”文章吧...
    99+
    2023-07-05
  • web前端常见面试题实例分析
    这篇文章主要介绍“web前端常见面试题实例分析”,在日常操作中,相信很多人在web前端常见面试题实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端常见面试题实例...
    99+
    2022-10-19
  • web前端面试题实例题目分析
    今天小编给大家分享一下web前端面试题实例题目分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。面试官:请你谈一下自适应(适...
    99+
    2023-07-05
  • web前端面试题实例代码分析
    这篇文章主要讲解了“web前端面试题实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端面试题实例代码分析”吧!面试官:给定一个元素,如何实现水平垂直居中?我:呃~,针对这个...
    99+
    2023-07-05
  • 高频web前端面试题实例分析
    本篇内容主要讲解“高频web前端面试题实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“高频web前端面试题实例分析”吧!面试官:请你简述 var、let、const 三者之间的区别?我:呃...
    99+
    2023-07-05
  • css与html的区别实例分析
    这篇“css与html的区别实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“css与...
    99+
    2022-10-19
  • 常用web前端手写功能实例分析
    今天小编给大家分享一下常用web前端手写功能实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Promise.all...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作