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

如何用CSS改变img标签图片的显示颜色?

图片 滤镜 颜色 filter 502    来源:    2025-03-23

在CSS中,直接改变<img>标签中图片的显示颜色并不像改变文字颜色那样简单,因为图片本身是位图或矢量图,而不是纯色。不过,你可以通过以下几种方式来实现类似的效果:

1. 使用 filter 属性

filter 属性可以应用各种图形效果(如模糊、灰度、对比度等)到元素上。你可以使用 grayscale()sepia()hue-rotate() 等滤镜来改变图片的颜色。

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

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

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

img {
    filter: brightness(50%); /* 降低图片的亮度 */
}

img {
    filter: contrast(200%); /* 增加图片的对比度 */
}

你可以组合多个滤镜来实现更复杂的效果:

img {
    filter: grayscale(50%) sepia(50%) hue-rotate(90deg);
}

2. 使用 background-blend-modemix-blend-mode

如果你将图片作为背景图片,可以使用 background-blend-mode 来混合背景颜色和图片。或者使用 mix-blend-mode 来混合图片与其他元素。

div {
    background-image: url('image.jpg');
    background-color: red;
    background-blend-mode: multiply; /* 混合背景颜色和图片 */
}
img {
    mix-blend-mode: multiply; /* 混合图片与父元素的背景颜色 */
}

3. 使用 mask 属性

mask 属性可以用来遮罩图片的一部分,从而改变图片的显示效果。

img {
    mask: linear-gradient(to bottom, transparent, black);
}

4. 使用 SVG 滤镜

如果你需要更复杂的颜色处理,可以使用 SVG 滤镜。你可以定义一个 SVG 滤镜,并将其应用到图片上。

<svg>
  <filter id="colorFilter">
    <feColorMatrix type="matrix" values="0 0 0 0 1
                                         0 0 0 0 0
                                         0 0 0 0 0
                                         0 0 0 1 0"/>
  </filter>
</svg>

<img src="image.jpg" style="filter: url(#colorFilter);">

5. 使用 canvas 或 JavaScript

如果你需要更高级的颜色处理,可以使用 canvas 或 JavaScript 来动态修改图片的像素数据。

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = 'image.jpg';
img.onload = function() {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    const data = imageData.data;
    for (let 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);
    document.body.appendChild(canvas);
};

总结

  • filter 属性:简单易用,适合大多数颜色调整需求。
  • background-blend-modemix-blend-mode:适合需要混合颜色的场景。
  • mask 属性:适合需要遮罩效果的场景。
  • SVG 滤镜:适合需要复杂颜色处理的场景。
  • canvas 或 JavaScript:适合需要动态处理图片像素的场景。

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