首先,你需要在一个svg里声明滤镜,该svg可以内嵌到html文件里,也可以单独保存。

[html] view plaincopy

如果该文件保存成了单独的文件gray.svg,我们可以在html文件里加以引用。

[css] view plaincopy

img{

filter:url('gray.svg#grayscale'); /*灰度滤镜放在gray.svg文件的id叫做grayscale的滤镜里*/

}

如果该文件内嵌入了html文件里,则是这样引用

[css] view plaincopy

img{

filter:url('#grayscale'); /*svg滤镜内嵌入了html文件*/

}

当然,我们也可以直接把svg文件打包嵌入到css里,如果你没有代码洁癖的话

[css] view plaincopy

img {

filter: url('url("data:image/svg+xml;utf8,

200.3333%200%200%200%200%200%201%200'/>

#grayscale");')

}

上面的方式,我们可以兼容大部分的浏览器(除了IE10、IE11),兼容的grayscale代码如下。

[css] view plaincopy

img{

-webkit-filter: grayscale(100%);            /* CSS3 filter方式,webkit内核方式,firefox外的绝大部分的现代浏览器*/

-moz-filter: grayscale(100%);            /* 目前没有实现 */

-ms-filter: grayscale(100%);

-o-filter: grayscale(100%);

filter: grayscale(100%);            /* CSS3 filter方式,标准写法*/

filter: url(filters.svg#grayscale); /* Firefox 4+ */

filter: gray;                       /* IE 6-9 */

}

img:hover{

-webkit-filter: grayscale(0%);

-moz-filter: grayscale(0%);

-ms-filter: grayscale(0%);

-o-filter: grayscale(0%);

filter: grayscale(0%);

filter: none; /* Firefox 4+, IE 6-9 */

}

4.js实现

对于IE10、11,我们怎么办呢?就得用js啦。

[javascript] view plaincopy

var imgObj = document.getElementById('imgToGray');

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);

该解决方案主要参考ajaxblender的《Convert Images to Grayscale》,大家可以继续阅读查阅详情。

5.跨浏览器解决方案

该方案主要参考《Cross-Browser Grayscale image example using CSS3 + JS v2.0. With browser feature detection using Modernizr》实现,英语没问题的童鞋可以移步观赏。博主写了两篇关于使用js实现跨浏览器解决灰度图像问题的博客,第一篇自行实现浏览器检测,第二篇使用了Modernizr。

该解决方案使用了jQuery和Modernizr,所以需要引入,此处省略,不知道怎么引入的童鞋,请自觉撞南墙100次。

对于IE浏览器

[javascript] view plaincopy

// IE 10 only CSS properties

var ie10Styles = [

'msTouchAction',

'msWrapFlow'];

var ie11Styles = [

'msTextCombineHorizontal'];

/*

* Test all IE only CSS properties

*/

var d = document;

var b = d.body;

var s = b.style;

var brwoser = null;

var property;

// Tests IE10 properties

for (var i = 0; i < ie10Styles.length; i++) {

property = ie10Styles[i];

if (s[property] != undefined) {

brwoser = "ie10";

}

}

// Tests IE11 properties

for (var i = 0; i < ie11Styles.length; i++) {

property = ie11Styles[i];

if (s[property] != undefined) {

brwoser = "ie11";

}

}

//Grayscale images only on browsers IE10+ since they removed support for CSS grayscale filter

if(brwoser == "ie10" || brwoser == "ie11" ){

$('body').addClass('ie11'); // Fixes marbin issue on IE10 and IE11 after canvas function on images

$('.grayscale img').each(function(){

var el = $(this);

el.css({"position":"absolute"}).wrap("

").clone().addClass('img_grayscale ieImage').css({"position":"absolute","z-index":"5","opacity":"0"}).insertBefore(el).queue(function(){

var el = $(this);

el.parent().css({"width":this.width,"height":this.height});

el.dequeue();

});

this.src = grayscaleIe(this.src);

});

// Quick animation on IE10+

$('.grayscale img').hover(

function () {

$(this).parent().find('img:first').stop().animate({opacity:1}, 200);

},

function () {

$('.img_grayscale').stop().animate({opacity:0}, 200);

}

);

// Custom grayscale function for IE10 and IE11

function grayscaleIe(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();

};

};

对于其他浏览器

[javascript] view plaincopy

// If the browser does not support CSS filters filters, we are applying grayscale.js function

// This part of Grayscale images applies on Opera, Firefox and Safari browsers

if (!Modernizr.cssfilters) {

var $images = $(".grayscale img"), imageCount = $images.length, counter = 0;

// One instead of on, because it need only fire once per image

$images.one("load",function(){

// increment counter every time an image finishes loading

counter++;

if (counter == imageCount) {

// do stuff when all have loaded

grayscale($('.grayscale img'));

$(".grayscale img").hover(

function () {

grayscale.reset($(this));

},

function () {

grayscale($(this));

}

);

}

}).each(function () {

if (this.complete) {

// manually trigger load event in

// event of a cache pull

$(this).trigger("load");

}

});

}

DEMO就不自己做了,大家看老外的DEMO的。That's all.

---------------------------------------------------------------

前端开发whqet,关注web前端开发技术,分享网页相关资源。

---------------------------------------------------------------

marbin mysql_跨浏览器图像灰度(grayscale)解决方案相关推荐

  1. html5图片灰度显示,实现各浏览器html图像灰度 跨浏览器图像灰度(grayscale)解决方案...

    实现图像灰度(grayscale)最初有ie6推出的专属属性filter实现,后来在css3里w3c实现了标准的filter,但是在不同浏览器的实现程度不一样,因此需要一种浏览器兼容的解决方案. IE ...

  2. 跨浏览器图像灰度(grayscale)解决方案

    <style type="text/css"> .gray {-webkit-filter: grayscale(100%); /* CSS3 filter方式,web ...

  3. java跨用问题怎么解决_跨浏览器问题的五种解决方案

    c编程技巧-117个问题解决方案示例 79.2元 包邮 (需用券) 去购买 > 简评:浏览器兼容性问题常常让人头疼,以下是避免出现这些问题的五个技巧. 1. 前缀 CSS3 样式 如果您正在使用 ...

  4. 浏览器跨域问题以及常用解决方案

    浏览器的同源策略 跨域的根本原因就是因为浏览器的同源策略,这是浏览器出于安全性考虑做出的限制,所谓同源是指:域名.协议.端口相同. 比如在互联网上有两个资源(网页或者请求等),如果A想要访问B的资源, ...

  5. 现在实现flexbox 的策略和工具(flexbox兼容到IE8的跨浏览器解决方案)

    原文:FLEXBOX IN THE REAL WORLD flexbox 相当好用,但是现在就可以用flexbox并且让它支持到IE8吗?如果你跟着下面的步骤,现在就可以开始用flexbox啦. 我介 ...

  6. html5ppt预览插件,jQuery高性能跨浏览器全屏幻灯片特效插件

    Nex是一款效果炫酷的.高性能的跨浏览器全屏幻灯片特效jQuery插件.该幻灯片插件允许你嵌入图片.视频,甚至是谷歌地图.该幻灯片提供了7组共34种不同的效果,可以使你适用于任何场景下使用.它的特点有 ...

  7. 微软Silverlight==跨浏览器、跨客户平台的技术

    silverlight 微软Silverlight是一个跨浏览器.跨客户平台的技术,能够设计.开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程 ...

  8. html做图片模糊效果,使用CSS制作跨浏览器的图片模糊效果

    在photoshop中,我们要制作一个图片的模糊效果是非常简单的,简单的实用高斯模糊等模糊滤镜就可以完成.现在,我们可以使用CSS和SVG来着网页中实现ps级的模糊效果. 页面中的图片模糊效果不可以滥 ...

  9. LabVIEW图像灰度分析与变换(基础篇—4)

    目录 1.图像灰度分析 1.1.直方图分析 1.1.1.灰度图像直方图分析 1.1.2.彩色图像直方图分析 1.2.线灰度曲线分析 1.3.图像线灰度均值分析 1.4.图像形心和质心分析 1.5.图像 ...

最新文章

  1. 1048 数字加密 --非满分
  2. 关于CVPR 2019投稿的一些感想
  3. request对象中的get、post方法
  4. python programming training(二): 排序算法
  5. 在Ubuntu虚拟机中编译运行C程序
  6. unilever workspace creating space
  7. C++自定义直方图统计
  8. Chrome浏览器里的-webkit-focus-ring-color
  9. 面试基础-- JDK、JRE、JVM
  10. matlab里数组的赋值,arrays – MATLAB结构赋值数组
  11. LeetCode 809. 情感丰富的文字
  12. keras学习笔记-黑白照片自动着色的神经网络-Beta版
  13. linux做完sftp端口分离后ftp,Linux 中实现文件传输服务(FTP、SFTP)
  14. Find password cracker in 11g
  15. 杨澜对话华为周跃峰:发展数字经济,存储技术是关键
  16. 三行代码实时追踪你的手,只要有浏览器就够了 | Demo·代码
  17. 5岁自学python编程-枣庄适合小学生学的少儿编程课程在哪里
  18. 如何真正学好数据科学?
  19. windows应用x64和x86运行效率_现在你可以在 Windows 中运行 Linux 应用了 | Linux 中国...
  20. vs2013 旗舰版 密钥

热门文章

  1. 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合
  2. stm32之电源管理(实现低功耗)
  3. CAN总线的初步认识
  4. 负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)
  5. 启明云端分享|SSD201_自动升级固件与烧录MAC地址
  6. 活动分享|今晚启明云端与您相约立创直播间,红包\彩屏开发板送不停!
  7. python 设置图片x轴带单位_用Python帮你上马,哪里无码打哪里
  8. 鸿蒙so系统,鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)
  9. 枚举的使用(限foton)
  10. 18.虚拟机linux上网问题