0

0

详解feColorMatrix_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:26:35

|

2251人浏览过

|

来源于php中文网

原创

你见过去年年底spotify分享的一个主题吗?他们通过图像颜色处理,达到一个令人折服的视觉审美效果。

Melodrive
Melodrive

Melodrive -一个AI音乐引擎,根据用户的情绪状态和喜好生成个性化的音乐。

下载

立即学习前端免费学习笔记(深入)”;

图像处理是一种非常强大的处理机制,在项目中添加一点小技巧,Web浏览器通过Web的过滤器可以动态处理图像色彩,这样将使你的项目能脱颖而出。

CSS vs. SVG

今年早些时候,推出的 CSSgram 库,使用CSS的 filter 和Blend Modes重新创建了 Instagram 过滤器。

立即学习前端免费学习笔记(深入)”;

现在使用CSS Blend Modes可以做一些修补,但是CSS的 filter 有一个极大的缺陷,其缺乏一个关键特性来对每个通道做处理。虽然CSS的 filter 很方便(其实就是源自于SVG的一种快捷方式),但无法提供控制RGBA通道。SVG(特别是 feColorMatrix )提供了更强大的力量,直接让CSS的 filter 升了一个层级,能更好的处理图像和得到更多的特殊效果。

SVG filters

在SVG的世界中,filter效果使用 fe- 前缀表示(就是“过滤效果”)。他们可以产生各种各样的色彩效果,也可以产生模糊和3D纹理。虽然 fe- 前缀一词有点松,但这篇文章后面做的总结都是有关于SVG的filter效果的方法。

目前浏览器对SVG filter的支持情况如下所示:

是的,在大多数情况之下,SVG filter都得到较好的支持,除非你还需要兼容IE9或IE9以下的浏览器。相对于CSS的filter和Blend Modes而言,SVG filter的浏览器支持度还是相对稳定的。不过也有一些奇怪的问题,并不像CSS的Blend Modes只在Chrome v46才会有 multiply 、 difference 和 exclusion 问题 。

注意:一些3D过滤效果,比如 feConvolveMatrix ,在某些浏览器中有已知的缺陷。尽管本文主要关注是 feColorMatrix ,但也无法做到。同时记住,在任何浏览器中性能将不可避免地遭到微小的影响。

filters的使用

SVG filters的使用基本上类似这样:

      // filter definition here can include    // multiple of the above items  

在SVG中,你可以声明一个filter。在大多数情况之下,可以使用SVG的 defs 来声明你想要的filter,然后可以在CSS这样使用声明的filter:

.filter-me {  filter: url('#filterName');}

filter的 URL 是相对的,所以 filter: url('../img/filter.svg#filterName') 和 filter: url('http://una.im/filters.svg#filterName') 都是有效的。

feColorMatrix

当谈到颜色的处理, feColorMatrix 是你最好的选择。 feColorMatrix 是过滤中的一种类型,使用矩阵来影响颜色的每个通道(基于RGBA),你可以将其想象成Photoshop中通道编辑一样。

feColorMatrix 看起来像这样(原始图像RGBA的值默认为 1 )。

         

矩阵计算RGBA自已每行的最终值,每个RGBA通道有自身的RGBA通道。最后一个值是一个乘数。最后RGBA的值从上向下读,像下面这个列表:

/* R G B A 1 */1 0 0 0 0 // R = 1*R + 0*G + 0*B + 0*A + 00 1 0 0 0 // G = 0*R + 1*G + 0*B + 0*A + 00 0 1 0 0 // B = 0*R + 0*G + 1*B + 0*A + 00 0 0 1 0 // A = 0*R + 0*G + 0*B + 1*A + 0

下图更形象:

RGB值

着色

你可以遗漏或混合颜色通道给图像着色,像下面这样:

     

这就是将 green 过滤器添加到图像上,其结果看起来像这样:

立即学习前端免费学习笔记(深入)”;

混合通道

你也可以通过混合RGB通道得到固定的颜色,并且给图像着色:

      

上面的示例,是在CMYK模式下混合颜色,删除 red 通道将意味着 green 和 blue 依然存在。当 green 和 blue 混合将创建 cyan , red 和 blue 混合将创建 magenta 。

@Justin McDowell 曾经写过 一篇文章阐述HSL (hue, saturation, lightness)颜色。我们也需要记住,在SVG中亮度的值是指光度。在这里,每个通道都会保留一个亮度的级别,比如我们看到的图像,就保留了一个洋红色:

立即学习前端免费学习笔记(深入)”;

为什么在云上和亮度的地方会变成洋红色?看看下面的RGB颜色图:

立即学习前端免费学习笔记(深入)”;

当一个颜色值失踪后会使用其他两个值取而代之。比如,没有 green 颜色通道就会没有 white 、 cyan 或 yellow 。其实他们并没有消失,只不过他们的亮度值(或 alpha )尚未触及。让我们看看操作这些 alpha 值会发生什么?

ALPHA值

我们可以通过 alpha (第四列)来突出阴影和亮度。第四行受 alpha 通道影响,而第四列将影响每个通道的亮度值,如:

      

在接下来的示例中,红色的矩阵基础上给 blue 的通道添加了 100% 的 alpha 。我们还保留 red 值,覆盖任何 red 的痕迹,会变成 blue ,而红色的亮度值中 blue 和 red 混合将成为 magenta 。

  

立即学习前端免费学习笔记(深入)”;

如果最后一个值小于 0 (变成 -1 ),就会得到相反效果。 blue 的痕迹就会变成 red 。下面就是取值为 -1 的效果:

    

立即学习前端免费学习笔记(深入)”;

把 -1 换成 .5 ,混合后颜色效果如下:

  

立即学习前端免费学习笔记(深入)”;

Blowing out channels

我们也可以通过第四行的个人通道影响整个 alpha 通道。示例中有一个蓝色的天空,可以将蓝色的天空变成白色,如下:

  

立即学习前端免费学习笔记(深入)”;

下面演示几个混合通道的示例:

      

Lighten 和 darken

您可以通过将RGB值每个通道的值设置成小于 1 创建一个 darken 效果,反之,将每个通道值设置成大于 1 可以创建一个 lighten 效果。下图能清晰的阐述这一切:

立即学习前端免费学习笔记(深入)”;

矩阵效果如下:

  

立即学习前端免费学习笔记(深入)”;

  

立即学习前端免费学习笔记(深入)”;

GRAYSCALE

你可以在一列中设置shade的像素值创建出灰度效果。运用的通道位置不一样,可以得到不同的灰度值。比如下面几个示例:

  

立即学习前端免费学习笔记(深入)”;

  

立即学习前端免费学习笔记(深入)”;

  

立即学习前端免费学习笔记(深入)”;

组合在一起

feColorMatrix 真正力量是能够混合多个通道,并且将这些概念运用到图像上产生一个新的图像效果。

  

在 red 的通道上采用 1 , green 通道上采用 0.5 ,而 blue 通道不在正常的位置上,而 alpha 设置为 0.5 。看到的效果是深蓝色的痕迹(shadows),突出的红色和一半亮度绿色的混合的中间色调。如果 red + green = blue 的话,那么 red + (green / 2) 能得到更多的 coral 色:

立即学习前端免费学习笔记(深入)”;

这是另一个示例:

  

立即学习前端免费学习笔记(深入)”;

有这么多值得探索的值。 Rachel Nabors 的 Dev Tools Challenger 就是一个很好的示例。( 注: 需要使用Firefox浏览器打开)。

酷!科学!颜色过滤器!现在,你对这方面知识有一定的了解。你现在所需要的是需要自己的工具来创建你自己的效果。

如果你想了解更多的细节,建议你阅读 Amelia Bellamy-Royds 写的 一篇文章 ,文章阐述了 feColorMatrix 更多的细节。 Sara Soueidan 也写了 一篇文章 ,在SVG中使用CSS的blend modes模式创建图像效果。

filter效果的参考

如查你理解了 feColorMatrix 是什么,你就可以在此基础上创建一个工具来生成过滤器效果。下面提供一些 fe- 相关的选项,希望对你有所帮助,并且能做进一步的探索。

  • feBlend :类似于 CSS blend modes ,描述了图像通过混合模式进行交互
  • feComponentTransfer : 改变个人对RGBA通道的总称(如 feFuncG )
  • feComposite :一个原始的过滤器, 定义像素图像交互方式
  • feConvolveMatrix :这个过滤器规定像素与他近邻将关闭交互(如:模糊、锐化)
  • feDiffuseLighting :定义了一个光源
  • feDisplacementMap : 使用另一个输入值( in2 )取代一个图像的像素值( in )
  • feFlood : 完成过滤器的填充区域指定的颜色和 alpha 等级
  • feGaussianBlur :输入的模糊值和标准值的偏差
  • feImage :使用其他的过滤器(像 feBlend 或 feComposite )
  • feMerge : 允许异步过滤效果应用,而不是分层
  • feMorphology : 削弱或扩张源图像
  • feOffset :用来创建阴影
  • feSpecularLighting : 通过 alpha 创建凹凸贴图,又将其称之为" 镜面 "( Phong Reflection Model )
  • feTile : 指图像如何重复填补空间
  • feTurbulence : 允许创建纹理

扩展阅读

  • MDN Docs on feColorMatrix
  • w3c Filter Docs
  • Smarter SVG Filters
  • feColorMatrix Overview on Web Platform
  • SVG 研究之路 (11) - filter:feColorMatrix

本文根据 @Una Kravets 的《 Finessing feColorMatrix 》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处: http://alistapart.com/article/finessing-fecolormatrix 。

大漠

常用昵称“大漠”,W3CPlus创始人,目前就职于手淘。中国Drupal社区核心成员之一。对HTML5、CSS3和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内最早研究和使用CSS3技术的一批人。CSS3、Sass和Drupal中国布道者。2014年出版《 图解CSS3:核心技术与案例实战 》。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

c语言项目php解释器源码分析探索
c语言项目php解释器源码分析探索

共7课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号