我一直喜歡灰度圖像因為我認(rèn)為他們看起來更有藝術(shù)感。很多圖片編輯如photoshop很容易把你的彩色圖像變成灰度。甚至有選擇調(diào)整顏色深度和色調(diào)。不幸的是,這樣的效果想做在網(wǎng)絡(luò)上并不容易,因為瀏覽器有差異。
1、cssfilter
使用css過濾器屬性可能是最簡單的方法把圖像變成灰度。以往,ie瀏覽器有一個專有的css屬性稱為過濾應(yīng)用自定義效果包括灰度。
現(xiàn)在,過濾器屬性是css3規(guī)范的一部分,并支持在一些瀏覽器,firefox、chrome和safari。以前,我們也提到webkit過濾器,它不僅將圖像變成灰色也可以變成褐色和模糊效果。
添加如下css樣式可以將圖像變成灰色
代碼如下:
img{
-webkit-filter:grayscale(1);/*webkit*/
filter:gray;/*ie6-9*/
filter:grayscale(1);/*w3c*/
}
支持ie6-9和webkit瀏覽器(chrome18+,safari6.0+,andopera15+)
(注意:這段代碼在firefox上無效果。)
2、javascript
第二種方法是通過使用javascript技術(shù)上應(yīng)該支持所有javascript的瀏覽器,包括ie6以下
代碼如下:
varimgobj=document.getelementbyid('js-image');
functiongray(imgobj){
varcanvas=document.createelement('canvas');
varcanvascontext=canvas.getcontext('2d');
varimgw=imgobj.width;
varimgh=imgobj.height;
canvas.width=imgw;
canvas.height=imgh;
canvascontext.drawimage(imgobj,0,0);
varimgpixels=canvascontext.getimagedata(0,0,imgw,imgh);
for(vary=0;y<imgpixels.height;y++){
for(varx=0;x<imgpixels.width;x++){
vari=(y*4)*imgpixels.width+x*4;
varavg=(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);
returncanvas.todataurl();
}
imgobj.src=gray(imgobj);
3、svg
第三種方法來自svgfilter.,你需要創(chuàng)建一個svg文件,并將以下代碼寫在里面,保存命名為***.svg
代碼如下:
<svgxmlns=http://www.w3.org/2000/svg>
<filterid=grayscale>
<fecolormatrixtype=matrixvalues=0.33330.33330.3333000.33330.33330.3333000.33330.33330.33330000010/>
</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);')
}
總結(jié)
為了能過跨瀏覽器支持灰度的效果,我們可以把上述方法和一起使用下面的代碼片段去實現(xiàn)。這段代碼將支持firefox3.5+,opera15+,safari,chrome,andie
代碼如下:
img{
-webkit-filter:grayscale(100%);
-webkit-filter:grayscale(1);
filter:grayscale(100%);
filter:url('../img/gray.svg#grayscale');
filter:gray;
}
我們可以利用上面的代碼和javascript方法和只提供css濾波器作為后備以防javascript被禁用。這個想法可以很容易地modernizr的幫助下實現(xiàn)的。
代碼如下:
.no-jsimg{
-webkit-filter:grayscale(100%);
-webkit-filter:grayscale(1);
filter:grayscale(100%);
filter:url('../img/gray.svg#grayscale');
filter:gray;
}
ok了,你的瀏覽器上可以看到很炫的效果了??!