热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[译]4个CSS调色滤镜

原文地址:4CSSFiltersForAdjustingColor原文作者:StevenBradley译文出自:掘金翻译计划本文永久链接&
  • 原文地址:4 CSS Filters For Adjusting Color
  • 原文作者:Steven Bradley
  • 译文出自:掘金翻译计划
  • 本文永久链接:github.com/xitu/gold-m…
  • 译者:iceytea
  • 校对者:lgh757079506, Baddyo

SVG 提供了一种非破坏性的方式来更改图像或图形的某些颜色属性。但不幸的是,有一些更改实现起来比较麻烦。CSS 滤镜允许你以非破坏性的方式更改某些颜色属性,并且比 SVG 滤镜更简单。

过去几周里,我一直把 CSS 滤镜作为 SVG 滤镜的备选方案来探讨。首先我大体介绍了一下滤镜,并展示了滤镜函数 blur() 的示例;然后我介绍了 url() 和 drop-shadow() 滤镜函数并分别提供了示例。

今天我想带你了解另外四个 CSS 滤镜函数,这些函数都是 SVG 滤镜函数 feColorMatrix 不同类型和值的快捷方式。

feColorMatrix

feColorMatrix 可以作为更改元素中某些颜色基本属性的一般方法。顾名思义,它通过使用值矩阵来为元素添加不同的滤镜效果。

CSS 中有四个不同的滤镜函数,它们可以复制使用 feColorMatrix 创建的效果。这有力地证明了,单个 SVG 滤镜比任何一个单独的 CSS 滤镜函数都要强大。

以下是那四个 CSS 滤镜:

  • grayscale();
  • hue-rotate();
  • saturate();
  • sepia();

那就让我们依次探究这些 CSS 滤镜函数,用它们为这张熟悉的(如果你一直在关注本系列文章的话)图片改变颜色吧。

grayscale()

grayscale() 将图像转换为灰度图像。

grayscale() = grayscale( [ | ] )

你可以通过提供介于 0.0 和 1.0 之间的数字或 0% 到 100% 之间的百分比来确定转换图像的比例。100%(或 1.0)将图像完全转换为灰度图像,0%(或 0.0)不会转换图像。0.0 到 1.0(或 0% 到 100%)之间的值是效果的线性乘数。不允许使用负值。

在第一个例子中,我给滤镜函数传入了值 1,给图片赋予了 100% 灰度的效果。

.strawberry {filter: grayscale(1);
}

原始图像包含大量灰色,但我认为你依然可以看到滤镜的效果,因为现在所有彩色都已被擦除。

为了比较,我在下面列出了与滤镜函数等效的矩阵实现方式。公平地说,使用 feColorMatrix 来删除彩色的更简便方法,是把 type 属性设置为 saturate。我稍后会告诉你的。

<filter id&#61;"grayscale"><feColorMatrix type&#61;"matrix"values&#61;"(0.2126 &#43; 0.7874 * [1 - amount]) (0.7152 - 0.7152 * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0(0.2126 - 0.2126 * [1 - amount]) (0.7152 &#43; 0.2848 * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0(0.2126 - 0.2126 * [1 - amount]) (0.7152 - 0.7152 * [1 - amount]) (0.0722 &#43; 0.9278 * [1 - amount]) 0 0 0 0 0 1 0"/>
filter>

尽管如此&#xff0c;这个示例仍是 CSS 滤镜功能更易用的有力佐证。使用这个特定矩阵&#xff0c;只是因为我在网上看到了该方法的一个应用示例。我不需要在 CSS 滤镜函数中搜索值 1。

hue-rotate()

hue-rotate() 按指定的量更改元素中每个像素的色调。

hue-rotate() &#61; hue-rotate( )

参数 angle&#xff08;角度&#xff09;以度为单位&#xff0c;你需要将单位指定为 deg。0deg 使元素保持不变&#xff0c;360deg 的任意倍数&#xff08;720deg、1080deg、1440px 等&#xff09;也是如此。

在这个例子中&#xff0c;我将色相旋转了 225 度。

.strawberry {filter: hue-rotate(225deg);
}

该值将原本是红色和黄色的花色&#xff0c;变得更加偏向粉色、紫色和蓝色。

这是用于比较的 SVG 滤镜。相比之下&#xff0c;CSS 滤镜仍然更简单&#xff0c;但在这种情况下的差距不大。

<filter id&#61;"hue-rotate"><feColorMatrix type&#61;"hueRotate" values&#61;"225"/>
filter>

saturate()

CSS 还提供了 saturate()&#xff0c;可用于提高或降低元素颜色的饱和度。

saturate() &#61; saturate( [ | ] )

与灰度函数一样&#xff0c;该函数的参数值定义了转换的比例。0%&#xff08;或 0.0&#xff09;使元素完全去饱和&#xff0c;100%&#xff08;1.0&#xff09;使元素保持不变。0 到 100 之间的值是效果的线性乘数。

在这里&#xff0c;我将元素设置为 50% 饱和度。

.strawberry {filter: saturate(0.5);
}

这生成了下面的图像效果。

saturate() 不允许使用负值&#xff0c;但你可以设置大于 100% 或 1.0 的值使元素过饱和。下面是同一张图片施加 900% 饱和度的效果&#xff08;filter: saturate(9);&#xff09;。

和 saturate() 对应的 SVG 滤镜也很简单。

<filter id&#61;"saturate"><feColorMatrix type&#61;"saturate" values&#61;"0.5"/>
filter>

在之前我曾经提到&#xff0c;用 feColorMatrix 来创建灰度图像&#xff0c;有一种更简单的方式&#xff0c;那就是把 type 属性设为 saturate。你所要做的就是将值设置为 0 以使图像完全去饱和&#xff0c;这与将其设置为 saturate(100%) 相同。

sepia()

最后是 sepia()&#xff0c;它将图像转换为棕褐色。

sepia() &#61; sepia( [ | ] )

现在你应该很熟悉这种写法了。这里的值定义了转换比例&#xff0c;100%&#xff08;1.0&#xff09;展现为完全棕褐色&#xff0c;0%&#xff08;0.0&#xff09;使图像效果保持不变。从 0% 到 100%&#xff0c;效果线性增强。

这个函数不允许使用负值&#xff0c;你可以设置大于 100%&#xff08;1.0&#xff09;的值&#xff0c;但效果不会继续增强。

这里我将 sepia 设为 75%&#xff1a;

.strawberry {filter: sepia(75%);
}

下图是滤镜的效果展示&#xff1a;

feColorMatrix 不支持棕褐色效果模式。如果要获得相同的棕褐色效果&#xff0c;你需要使用另一个模型。

<filter id&#61;"sepia"><feColorMatrix type&#61;"matrix"values&#61;"(0.393 &#43; 0.607 * [1 - amount]) (0.769 - 0.769 * [1 - amount]) (0.189 - 0.189 * [1 - amount]) 0 0(0.349 - 0.349 * [1 - amount]) (0.686 &#43; 0.314 * [1 - amount]) (0.168 - 0.168 * [1 - amount]) 0 0(0.272 - 0.272 * [1 - amount]) (0.534 - 0.534 * [1 - amount]) (0.131 &#43; 0.869 * [1 - amount]) 0 0 0 0 0 1 0"/>
filter>

我认为&#xff0c;在达成相同效果上&#xff0c;SVG 可以为你提供更大的灵活性&#xff0c;CSS 滤镜函数更简单。

结论

上面提到的这四个 CSS 滤镜函数都是 feColorMatrix 的快捷方式。其中有两个&#xff08;grayscale()sepia()&#xff09;替换了复杂矩阵&#xff0c;另外两个替换了特定类型的函数。

我希望你能了解到这四个滤镜函数都简单易用好理解。但恐怕你在使用这些函数调整图像图形参数时&#xff0c;还是会遇到一些困难。

如果发现译文存在错误或其他需要改进的地方&#xff0c;欢迎到 掘金翻译计划 对译文进行修改并 PR&#xff0c;也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区&#xff0c;文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域&#xff0c;想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。


转:https://juejin.im/post/5d039c36f265da1b60290096



推荐阅读
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 导读:很多朋友问到关于黑马php2019如何的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 手动将 Webpack 2.x 迁移到最新版 Webpack 4.8.3(当前 GitHub 最新版本)
    手动webpack2.x升级到webpack4.8.3(当前github最新版本)一直使用的webpack是2.3.3版本作为生产环境使用,看了react-create- ... [详细]
  • CSS深入剖析text和column
    这里写目录标题一、text-shadow二、font-face三、其他text常用特性四、column一、text-shadow与box-shadow类似,这里通过 ... [详细]
  • web前端菜鸟如何升级到大神(转载)标签:web前端web前端菜鸟如何升级到大神(转载)标签:web前端随着互联网的发展速度迅猛,web前端工程师越来越火热,想学习Web前端开发吗 ... [详细]
author-avatar
mobiledu2502863117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有