记录前端更改纯色图片的几种方式

2023-10-14 18:40

本文主要是介绍记录前端更改纯色图片的几种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现纯色图片换色

当然,你也可以不用纯色图片,只是换出来都成了纯色……

(好久没更新了,近一年真是一言难尽……)

一、通过filter: drop-shadow

filter: drop-shadow(x偏移 y偏移 模糊大小 色值)

大概原理:通过在原图片上设置投影,投影是在图片的下面,可以通过偏移量来改变投影位置,改变投影的颜色来达到改变图片颜色的效果,最后再通过外层盒子达到只显示投影,这样就完成了图片的换色。

实现:

<style>.container {overflow: hidden;width: 100px;height: 100px;margin: 0 auto;border: 1px solid #CCC;}.test-img {width: 100%;height: 100%;/* 变换y *//* filter: drop-shadow(0px 100px 0px #CCC);transform: translateY(-100px); *//* 变换x */filter: drop-shadow(100px 0px 0px #CCC);transform: translateX(-100px);}
</style><div class="container"><img src="./images/test.webp" class="test-img">
</div>

效果:

未隐藏原图

在这里插入图片描述

隐藏原图

在这里插入图片描述

二、通过mask

mask-image
mask-repeat
mask-size

当然 mask 还有其他属性也可以达到效果,有兴趣的可以研究一下~

大概原理:通过 mask-image 设置一个元素的蒙版图像,在默认的情况下,蒙版图像的 alpha 通道将与元素的 alpha 通道相乘(大概就是说,生成的蒙版图像,图片的背景透明度和元素的透明度结合,如果背景设置颜色,图片的透明处和背景结合也就成了透明,图片的不透明处,也就是有颜色的地方和背景结合就显示对应的颜色,文本描述很抽象,可以在代码中更改参数看效果)。再通过 mask-repeat 设置蒙层图像不重复,最后通过 mask-size 设置蒙版图像的尺寸达到换色的效果。

实现:

<style>.container {overflow: hidden;width: 100px;height: 100px;margin: 0 auto;background-color: rgba(0, 255, 0, .4);-webkit-mask-image: url(./images/test.webp);mask-image: url(./images/test.webp);-webkit-mask-repeat: no-repeat;mask-repeat: no-repeat;-webkit-mask-size: cover;mask-size: cover;}
</style><div class="container"></div>

效果:

在这里插入图片描述

三、通过canvas

大概原理:通过 canvas 操作部分区域的像素点来达到效果。

实现:

<canvas id="canvas">您的浏览器不支持画布元素</canvas><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');const rgbaArr = [0, 255, 0, 0];const [r1, r2, r3, r4] = rgbaArr;const image = new Image();image.onload = function () {ctx.drawImage(image, 0, 0, 100, 100);const imageData = ctx.getImageData(0, 0, 100, 100);let len = imageData.data.length;for (let i = 0; i < len; i += 4) {imageData.data[i] = r1;imageData.data[i + 1] = r2;imageData.data[i + 2] = r3;}ctx.putImageData(imageData, 0, 0);}image.src = './images/test.webp';
</script>

效果:

原图

在这里插入图片描述

更改之后的

在这里插入图片描述

写在最后

只是提供了几种实现更改纯色图片颜色需求的简单方式,如果还有其他较好的方式后面发现了再补充。其中没有对比各种方式的优缺点优缺点,只是工作中遇到相应的需求,然后去参考相应的文档,最后做一个大概得记录。(掘金同名,微信公众号:“前端学习小营地”)……

这篇关于记录前端更改纯色图片的几种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/212387

相关文章

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd