网站图片实现灰色效果的三种方法

发布时间:2020-03-28编辑:脚本学堂
本文介绍了让网站图片变成灰色效果的三种实现方法,很多图片编辑如photoshop很容易把彩色图像变成灰度,本文要讲的是用css滤镜来实现这种效果,有需要的朋友参考下。

以下是网站图片实现灰色效果的三种方法:

1、css filter
使用css过滤器属性可能是最简单的方法把图像变成灰度。以往,ie浏览器有一个专有的css属性称为过滤应用自定义效果包括灰度。
现在,过滤器属性是css3规范的一部分,并支持在一些浏览器,firefox、chrome和safari。
以前也提到webkit过滤器,它不仅将图像变成灰色也可以变成褐色和模糊效果。
添加如下css样式可以将图像变成灰色:
 

复制代码 代码示例:
img {
-webkit-filter: grayscale(1); /* webkit */
filter: gray; /* ie6-9 */
filter: grayscale(1); /* w3c */
}

支持ie6-9和webkit浏览器(chrome 18+, safari 6.0+, and opera 15+)
(注意:这段代码在firefox上无效果。)

2、javascript
第二种方法,通过使用javascript技术上应该支持所有javascript的浏览器,包括ie6以下的浏览器。
 

复制代码 代码示例:
var imgobj = document.getelementbyid('js-image');
function gray(imgobj) {
var canvas = document.createelement('canvas');
var canvascontext = canvas.getcontext('2d');
var imgw = imgobj.width;
var imgh = imgobj.height;
canvas.width = imgw;
canvas.height = imgh;
canvascontext.drawimage(imgobj, 0, 0);
var imgpixels = canvascontext.getimagedata(0, 0, imgw, imgh);
for(var y = 0; y < imgpixels.height; y++){
for(var x = 0; x < imgpixels.width; x++){
var i = (y * 4) * imgpixels.width + x * 4;
var avg = (imgpixels.data[i] + imgpixels.data[i + 1] + imgpixels.data[i + 2]) / 3;
imgpixels.data[i] = avg;
imgpixels.data[i + 1] = avg;
imgpixels.data[i + 2] = avg;
}
}
canvascontext.putimagedata(imgpixels, 0, 0, 0, 0, imgpixels.width, imgpixels.height);
return canvas.todataurl();
}
imgobj.src = gray(imgobj);

3、svg
第三种方法来自svg filter.,需要创建一个svg文件,并将以下代码写在里面,保存命名为***.svg
 

复制代码 代码示例:
<svg xmlns="http://www.w3.org/2000/svg">
<filter id="grayscale">
<fecolormatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/>
</filter>
</svg>

然后,利用过滤器的属性,可以通过svg文件中的元素的id连接svg文件。
 

复制代码 代码示例:
img {
filter: url('img/gray.svg#grayscale');
}

也可以把它放到css文件中,例如:
 

复制代码 代码示例:
img {
filter: url('url("data:image/svg+xml;utf8,<svg%20xmlns='http://www.w3.org/2000/svg'><filter%20id='grayscale'><fecolormatrix%20type='matrix'%20values='0.3333%200.3333%200.3333%200%200%200.3333%200.3333%200.3333%200%200%200.3333%200.3333%200.3333%200%200%200%200%200%201%200'/></filter></svg>#grayscale");')
}

总结
为了能过跨浏览器支持灰度的效果,可以把上述方法和一起使用下面的代码片段去实现。
这段代码将支持firefox 3.5+, opera 15+, safari, chrome, and ie
 

复制代码 代码示例:
img {
-webkit-filter: grayscale(100%);
-webkit-filter: grayscale(1);
filter: grayscale(100%);
filter: url('../img/gray.svg#grayscale');
filter: gray;
}

可以利用上面的代码和javascript方法和只提供css滤波器作为后备以防javascript被禁用。
这个想法可以很容易地modernizr的帮助下实现的。
 

复制代码 代码示例:
.no-js img {
-webkit-filter: grayscale(100%);
-webkit-filter: grayscale(1);
filter: grayscale(100%);
filter: url('../img/gray.svg#grayscale');
filter: gray;
}