CSS+Canvas+jQury實現圖片灰度漸變效果

        以前在製做圖片灰度漸變特效時都是經過事先準備好兩張圖片,一張彩色圖片、一張灰色圖片,而後經過CSS定位把灰色圖片疊放到彩色圖片上,鼠標移入時用jQury把灰色圖像的透明度漸變爲0,鼠標移出時再把灰色圖片透明度漸變爲1,這樣就實現了圖片的灰度漸變效果。但這種實現方式每張圖片都要加載兩張圖片,影響網頁打開的速度,若是圖片是經過後臺上傳的話那就更麻煩了,每次都要上傳兩張圖片,並且客戶可不必定會使用圖像處理軟件把圖片變爲灰色哦。

        這兩天研究了圖片灰度實現的問題,其實徹底能夠利用CSS濾鏡和HTML5的畫布功能讓彩色圖片以灰度的方式呈如今瀏覽器上,以前的問題就迎難而解了。

如何實現圖片灰度效果請閱讀下面兩篇文章
        CSS實現圖片灰度效果
        CSS+Canvas實現圖片灰度效果,兼容全部瀏覽器

html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Gray</title>
<style>
.item { width: 200px; float: left; margin: 10px; text-align: center; }
.ie { /*filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale = 1);*/ filter: Gray; }

.box { width:200px; height:150px; position: relative; }
.box img { position: absolute; top:0; left:0; }
.img-color { z-index: 2; filter:alpha(opacity=0); opacity:0; }
.img-gray { z-index: 1;}
</style>
<script src="jquery.js"></script>
</head>

<body>
<div id="animate" class="box"><img id="img-color" class="img-color" src="chrysanthemum.jpg"/><img id="img-gray" class="img-gray" src="chrysanthemum.jpg"/></div>
<script>
function grayscale(src){
	var canvas = document.createElement('canvas');
	var ctx = canvas.getContext('2d');
	var imgObj = new Image();
	imgObj.src = src;
	canvas.width = imgObj.width;
	canvas.height = imgObj.height;
	ctx.drawImage(imgObj, 0, 0);
	var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
	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;
		}
	}
	ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
	return canvas.toDataURL();
}

window.onload = function(){
	var lteIE8 = !-[1,]; //IE8版本如下瀏覽器

    var _imgColor = $('#img-color'), _imgGray = $('#img-gray');
	
	//圖片灰度效果
    if(lteIE8){
        _imgGray.addClass('ie');
    }else{
        _imgGray.attr('src', grayscale(_imgGray.attr('src')));
    }
	
	//動畫
    _imgColor.hover(
           function(){
               $(this).stop().animate({opacity:1}, 1000);
           },
           function(){
               $(this).stop().animate({opacity:0}, 1000);
           }
    )
}
</script>
</body>
</html>

        圖片漸變的效果仍是同樣經過jQury改變圖片透明度的方式實現,不一樣的是如今彩圖和灰圖用到的時同一張圖片,瀏覽器不用額外加載多一張圖。
        注意:此次是彩色圖片疊加在灰色圖片上,經過改變彩色圖片的透明度來實現漸變效果的,之因此這麼作是由於在IE6下給圖片使用灰度濾鏡後會讓外層的a標籤連接失效。jquery