使用不带覆盖的CSS给图像着色

eqqqjvef  于 2022-11-19  发布在  其他
关注(0)|答案(5)|浏览(145)

在WebKit浏览器中,是否可以使用CSS以特定颜色对图像着色而不使用覆盖层?

尝试失败

  • 设法使用hue-rotate将图像染成棕褐色或任意颜色,但找不到使用特定颜色对其进行染色的方法。
  • 创建“色调”SVG滤镜并使用-webkit-filter: url(#tint)调用它在Chrome上不起作用。
  • opacity/box-shadow css属性与drop-shadow/opacity滤镜的所有可能组合都不会生成所需的效果。
    创意
  • 给定一种颜色,是否可以合并HSB滤镜(hue-rotatesaturationbrightness)来生成其色调?
ssgvzors

ssgvzors1#

最终它将是,使用 * 着色器 *。请参阅W3C文档中的过滤器。

目前,可能的情况是:

-webkit-filter: grayscale; /*sepia, hue-rotate, invert....*/
-webkit-filter: brightness(50%);

请参阅

z5btuh9x

z5btuh9x2#

虽然没有独立的色调过滤器,你可以使一种由现有的过滤器的组成没有阴影。
合并棕褐色以统一颜色,然后色调旋转到您想要的颜色

-webkit-filter: sepia(90%) hue-rotate(90deg);

我使用的边框与阿尔法值为我的色调,它实际上是一个覆盖,但不使用任何额外的DOM元素,使过渡到棕褐色+色调旋转更简单时,其他浏览器得到这些过滤器。

p8h8hvxi

p8h8hvxi3#

现在使用SVG过滤器就可以做到这一点,而不必使用着色器。您可以通过-webkit-filter将其用作CSS过滤器(尽管它在IE中不起作用):“url(#您的过滤器ID)”等语法。

<svg width="800px" height="600px" viewbox="0 0 800 600">
    <defs>
        <filter id="f1" x="0%" y="0%" width="100%" height="100%" color-interpolation-filters="sRGB">
        <feColorMatrix id="tinter" type="matrix" values=".6 .6 .6 0 0 
                                                            .2 .2 .2 0 0 
                                                            .0 .0 .0 0 0 
                                                             0    0   0 1 0"/>
        </filter>     
    </defs>

 <image x="0" y="0" width="550" height="370" preserveAspectRatio="true"
    filter="url(#tinter)" xlink:href="http://www.crossfitwaxahachie.com/wp-content/uploads/2012/04/IMG_0752.jpg"/>
</svg>

http://codepen.io/mullany/details/baLkH/上的动态演示

ee7vknir

ee7vknir4#

box-shadow: inset 0px 0px 64px 64px cornflowerblue, 0px 0px 4px 4px cornflowerblue;

任何颜色(而不是棕褐色或旋转过滤器,这是不是到处都支持)的色调可以通过一个适当大小的嵌入框阴影实现。

iyfjxgzm

iyfjxgzm5#

那垫个垫子怎么样?
于飞:

<span class="tint"><img src="..." /></span>

CSS:

.tint { background-color:red; display:inline-block; }
.tint img { opacity:0.8 }

调整颜色和不透明度,因为你希望。不真正工作的图像与透明度在他们。

相关问题