插件窝 干货文章 如何用CSS改变IMG标签中图片的颜色?

如何用CSS改变IMG标签中图片的颜色?

颜色 图片 Canvas 改变 256    来源:    2025-03-23

在CSS中,直接改变<img>标签中图片的颜色并不容易,因为<img>标签加载的是位图(如JPG、PNG等),这些图片的颜色是固定的。不过,你可以通过以下几种方法来实现类似的效果:

1. 使用CSS滤镜(filter

CSS的filter属性可以应用各种图形效果,包括改变图片的颜色。例如,你可以使用grayscalesepiahue-rotate等滤镜来改变图片的颜色。

img {
    filter: grayscale(100%); /* 将图片变为黑白 */
}

img {
    filter: sepia(100%); /* 将图片变为深褐色 */
}

img {
    filter: hue-rotate(90deg); /* 改变图片的色调 */
}

2. 使用background-blend-mode

如果你将图片作为背景图像,可以使用background-blend-mode来混合背景颜色和图片,从而改变图片的颜色。

div {
    background-image: url('your-image.jpg');
    background-color: red; /* 设置背景颜色 */
    background-blend-mode: multiply; /* 混合模式 */
    width: 200px;
    height: 200px;
}

3. 使用SVG图片

如果你使用的是SVG图片,你可以直接通过CSS改变SVG的颜色,因为SVG是矢量图形,颜色可以通过CSS控制。

<svg width="100" height="100">
    <rect width="100" height="100" fill="currentColor" />
</svg>
svg {
    color: red; /* 改变SVG的颜色 */
}

4. 使用mask属性

你可以使用mask属性来创建一个遮罩,然后通过改变遮罩的颜色来间接改变图片的颜色。

img {
    mask-image: url('your-image.jpg');
    mask-mode: alpha;
    background-color: red; /* 设置背景颜色 */
}

5. 使用JavaScript和Canvas

如果你需要更复杂的颜色处理,可以使用JavaScript和Canvas来动态修改图片的颜色。

<canvas id="myCanvas"></canvas>
var img = new Image();
img.src = 'your-image.jpg';
img.onload = function() {
    var canvas = document.getElementById('myCanvas');
    var ctx = canvas.getContext('2d');
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    var data = imageData.data;
    for (var i = 0; i < data.length; i += 4) {
        // 修改像素颜色
        data[i] = 255 - data[i]; // 红色通道
        data[i + 1] = 255 - data[i + 1]; // 绿色通道
        data[i + 2] = 255 - data[i + 2]; // 蓝色通道
    }
    ctx.putImageData(imageData, 0, 0);
};

总结

  • CSS滤镜:适用于简单的颜色调整。
  • 背景混合模式:适用于将图片作为背景图像的情况。
  • SVG:适用于矢量图形,可以直接通过CSS改变颜色。
  • Canvas:适用于需要复杂颜色处理的场景。

根据你的具体需求选择合适的方法。