通过CSS实现将图片变黑白

一、背景和意义

有时候,需要将页面中的一些图片变成黑白色。这类场景包括:一年中某些特殊的日期;某些重大空难发生之后;某个物品/关卡解锁之前等等。让设计师用photoshop把图片改成黑白再挂到网页上当然也是一种可行的办法,但其成本肯定高于直接通过CSS实现。本文给出使用CSS实现图片转黑白的简单示例。

二、代码示例

2.1 使用filter(滤镜)

如果在网上搜索图片变黑白的方法,搜索到的最多的方法也是使用filter(滤镜),即增加CSS属性filter: grayscale(1)。示例代码如下:

html 复制代码
<style>
    .image {
        width: 320px;
        height: 240px;
        background-size: cover;
        background-image: url("https://5b0988e595225.cdn.sohucs.com/images/20171010/2ab85e31fee24a36b3e9bb79d71885b2.jpeg");
    }
    .grayscale {
        filter: grayscale(1);
    }
</style>

<p>原图:</p>
<div class="image"></div>

<p>使用filter(滤镜)后的图:</p>
<div class="image grayscale"></div>

运行结果如下:

2.2 使用background-blend-mode

除了filter之外,还有一种方法是使用background-blend-mode,不过background-blend-mode需要和background-color配合使用才能实现图片转黑白的效果,示例代码如下:

html 复制代码
<style>
    .image {
        width: 320px;
        height: 240px;
        background-size: cover;
        background-image: url("https://5b0988e595225.cdn.sohucs.com/images/20171010/2ab85e31fee24a36b3e9bb79d71885b2.jpeg");
    }
    .grayscale {
        filter: grayscale(1);
    }
    .blend {
        background-color: #000;
        background-blend-mode: luminosity;
    }
</style>

<p>原图:</p>
<div class="image"></div>

<p>使用filter(滤镜)后的图:</p>
<div class="image grayscale"></div>

<p>使用background-blend-mode后的图:</p>
<div class="image blend"></div>

运行结果如下:

从上图来看,background-blend-mode和使用filter得到的效果差不多。

2.3 图上有文字的情况

在前面的示例中,background-blend-mode和使用filter得到的效果差不多。但是如果图片上方有文字,其效果会有所差异。示例代码如下:

html 复制代码
<style>
    .image {
        width: 320px;
        height: 240px;
        background-size: cover;
        background-image: url("https://5b0988e595225.cdn.sohucs.com/images/20171010/2ab85e31fee24a36b3e9bb79d71885b2.jpeg");
        margin-top: 10px;
        font-size: 2rem;
        text-align: center;
        color: #ff0000;
    }
    .grayscale {
        filter: grayscale(1);
    }
    .blend {
        background-color: #000;
        background-blend-mode: luminosity;
    }
</style>

<div class="image">原图</div>
<div class="image grayscale">使用filter(滤镜)后的图</div>
<div class="image blend">使用background-blend-mode后的图</div>

运行结果为:

从上图可以看出,filter会把图片上的彩色文字也变成黑白,而background-blend-mode则不会。所以filter和background-blend-mode在实现效果上还是有差异的,具体用哪一个要看业务场景和具体的需求。

相关推荐
漂流瓶jz2 小时前
Webpack如何实现万物皆可import?loader的使用/配置/手写实践
前端·javascript·webpack
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互
修己xj4 小时前
告别手动存图!这款叫 Fatkun 的浏览器插件,简直是素材收集神器
前端
袋鼠云数栈4 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
AskHarries4 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
Moment5 小时前
长上下文会最终杀死 Rag 吗?
前端·javascript·后端
qcx235 小时前
【系统学AI】25 论文导读 ①:两篇改变 AI 的开山之作——Attention Is All You Need & ReAct
前端·人工智能·react.js·transformer
kyriewen6 小时前
大文件上传最全指南:分片、断点续传、秒传,一篇就够了
前端·javascript·面试
郑洁文7 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化
新酱爱学习7 小时前
手搓 10 个 Skill 后,我把重复劳动收敛成了一套零依赖 CLI 工具
前端·javascript·人工智能