CSS+Canvas+jQury实现图片灰度渐变效果
2012-07-06 18:16
781 查看
之前在制作图片灰度渐变特效时都是通过事先准备好两张图片,一张彩色图片、一张灰色图片,然后通过CSS定位把灰色图片叠放到彩色图片上,鼠标移入时用jQury把灰色图像的透明度渐变为0,鼠标移出时再把灰色图片透明度渐变为1,这样就实现了图片的灰度渐变效果。但这种实现方式每张图片都要加载两张图片,影响网页打开的速度,如果图片是通过后台上传的话那就更麻烦了,每次都要上传两张图片,而且客户可不一定会使用图像处理软件把图片变为灰色哦。
这两天研究了图片灰度实现的问题,其实完全可以利用CSS滤镜和HTML5的画布功能让彩色图片以灰度的方式呈现在浏览器上,之前的问题就迎难而解了。
如何实现图片灰度效果请阅读下面两篇文章
CSS实现图片灰度效果
CSS+Canvas实现图片灰度效果,兼容所有浏览器
图片渐变的效果还是一样通过jQury改变图片透明度的方式实现,不同的是现在彩图和灰图用到的时同一张图片,浏览器不用额外加载多一张图。
注意:这次是彩色图片叠加在灰色图片上,通过改变彩色图片的透明度来实现渐变效果的,之所以这么做是因为在IE6下给图片使用灰度滤镜后会让外层的a标签链接失效。
这两天研究了图片灰度实现的问题,其实完全可以利用CSS滤镜和HTML5的画布功能让彩色图片以灰度的方式呈现在浏览器上,之前的问题就迎难而解了。
如何实现图片灰度效果请阅读下面两篇文章
CSS实现图片灰度效果
CSS+Canvas实现图片灰度效果,兼容所有浏览器
<!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标签链接失效。
相关文章推荐
- CSS+Canvas实现图片灰度效果,兼容所有浏览器
- HTML开发——项目心得(CSS实现导航栏选项卡炫酷渐变效果以及图片替换文本显示)
- 用canvas实现图片滤镜效果详解之灰度效果
- 用canvas实现图片滤镜效果详解之灰度效果
- 用canvas实现图片滤镜效果详解之灰度效果
- 用canvas实现图片滤镜效果详解之灰度效果
- CSS 实现图片灰度效果 兼容各种浏览器
- CSS Filter 代替 图片 实现 渐变背景效果。
- CSS 实现图片灰度效果 兼容各种浏览器
- CSS 实现图片灰度效果
- CSS 实现图片灰度效果
- CSS 实现图片灰度效果 兼容各种浏览器
- html+css实现图片滑移效果
- 用CSS实现无图片背景圆角效果
- 原生js和css实现图片轮播效果
- CSS实现文本渐变效果
- HTML中用CSS实现图片与内容前后翻转动画效果
- css实现图片裁切效果
- css基础 float img 实现文字环绕图片的效果