通过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在实现效果上还是有差异的,具体用哪一个要看业务场景和具体的需求。

相关推荐
web小白成长日记4 小时前
企业级 Vue3 + Element Plus 主题定制架构:从“能用”到“好用”的进阶之路
前端·架构
APIshop5 小时前
Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析
前端·爬虫·python
风送雨5 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
XTTX1105 小时前
Vue3+Cesium教程(36)--动态设置降雨效果
前端·javascript·vue.js
LYFlied6 小时前
WebGPU与浏览器边缘智能:开启去中心化AI新纪元
前端·人工智能·大模型·去中心化·区块链
Setsuna_F_Seiei6 小时前
2025 年度总结:人生重要阶段的一年
前端·程序员·年终总结
model20056 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
han_7 小时前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
前端·javascript·面试
aPurpleBerry7 小时前
React 01 目录结构、tsx 语法
前端·react.js
jayaccc7 小时前
微前端架构实战全解析
前端·架构