原文:http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/
在非IE浏览器中实现“灰阶化[1]”
这个问题看似简单,实际上要付出很大的努力[2]。
在 IE中,grayscale滤镜可以应用到任意一个元素中,elem.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)';
如上所示,在IE中实现这种效果简单是小菜一碟;然而,
需要有两件情况值得考虑:图片元素和非图片元素。“非图片”
// Desaturate:降低饱和度
function RGBtoDesat(r,g,b) {
var average = (r + g + b) / 3;
return {
r: average,
g: average,
b: average
};
}
// Grayscale:灰阶化
function RGBtoGrayscale(r,g,b) {
var mono = parseInt( (0.2125 * r) + (0.7154 * g) + (0.0721 * b), 10 );
return {
r: mono,
g: mono,
b: mono
};
}因此,每个带颜色属性的元素要使用它来转为灰阶;
我们的图片能否转为灰阶取决于两个因素;
实现这种方式是要“手工”遍历图片中的每一像素,
鉴于上面提到的原因,因此在任一个元素需要“灰阶化”前,
为什么呢,这是为什么呢?
你肯定想知道在“灰阶化”会有哪些应用。那么,比如说:
“灰阶化”
示例
我做了一个示例页面,上面有几个格斗士[5]的图片,
http://james.padolsey.com/demos/grayscale/
使用方法
要对一个元素实现“灰阶化”需要调用 grayscale()函数,并将元素作为参数传递,比如:
var el = document.getElementById( 'myEl' );
grayscale( el );
// 也可以传递一个DOM集合
// (这样所有的元素都会得到“灰度效果”)
grayscale( document.getElementsByTagName('div') );
//也可以在jQuery对象集合中使用
grayscale( $('div') );若要重置元素(返回到原来的颜色状态)
其中的prepare函数,上面已经讲过了,grayscale.reset( el );
// reset()同样可以接受DOM对象或jQuery对象集合参数
grayscale.reset( $('div') );grayscale.prepare( document.getElementById('myEl') );
// 同样可以接受DOM对象或jQuery对象集合参数
grayscale.prepare( $('.gall_img') );
[完]
注:
[1]:灰阶化:原文grayscaling,意为“采取灰度标准”,即灰阶化,将图片由彩色转为灰度;
[2]原文为”This started out as a little experiment and eventually turned into quite an endeavor.“,可能存在翻译问题;
[3]原文为“externally hosted images cannot be passed into ‘getImageData’ regardless of whether it’s supported.”,翻译存疑;
[4]零超时递归技术:原文zero-timeout recursion technique,应为zero-time recursive technique;参见http://en.wikipedia.org/wiki/Recursion_( computer_science);
[5]格斗士:原文blood-thirsty hunters,嗜血的猎人
--EOF--
灰阶化可以用在414或者512,值得用用喽。。。
![在非IE浏览器中实现“灰阶化[1]”](https://blog-1251173875.cos.ap-shanghai.myqcloud.com/2625/conversions/cover-1239-card.jpg)
评论 (0)
暂无评论