让网页图片变灰色的三种方法

我一直喜欢灰度图像因为我认为他们看起来更有艺术感。很多图片编辑如Photoshop很容易把你的彩色图像变成灰度。甚至有选择调整颜色深度和色调。不幸的是,这样的效果想做在网络上并不容易,因为浏览器有差异。

1、CSS Filter

  使用CSS过滤器属性可能是最简单的方法把图像变成灰度。以往,IE浏览器有一个专有的CSS属性称为过滤应用自定义效果包括灰度。

  现在,过滤器属性是CSS3规范的一部分,并支持在一些浏览器,Firefox、Chrome和Safari。以前,我们也提到Webkit过滤器,它不仅将图像变成灰色也可以变成褐色和模糊效果。

  添加如下CSS样式可以将图像变成灰色

img { 
-webkit-filter: grayscale(1);/* Webkit */ 
filter:gray;/* IE6-9 */ 
filter: grayscale(1);/* W3C */ 
}
  支持IE6-9和Webkit浏览器(Chrome 18+, Safari 6.0+, and Opera 15+)

  (注意:这段代码在Firefox上无效果。)

  2、Javascript

  第二种方法是通过使用JavaScript技术上应该支持所有JavaScript的浏览器,包括IE6以下

  代码来自Ajax Blender.

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

  第三种方法来自SVG Filter.,你需要创建一个SVG文件,并将以下代码写在里面,保存命名为***.svg

<svgxmlns=" http://www.w3.org/2000/svg"> 
<filterid="grayscale"> 
<feColorMatrixtype="matrix"values="0.3333
0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0
0 1 0"/> 
</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");‘) 
}
  总结

  为了能过跨浏览器支持灰度的效果,我们可以把上述方法和一起使用下面的代码片段去实现。这段代码将支持Firefox 3.5+, Opera 15+, Safari, Chrome, and IE

img { 
-webkit-filter: grayscale(100%); 
-webkit-filter: grayscale(1); 
filter: grayscale(100%);

filter:url(‘../img/gray.svg#grayscale‘); 
filter:gray; 
}
  我们可以利用上面的代码和JavaScript方法和只提供CSS滤波器作为后备以防JavaScript被禁用。这个想法可以很容易地Modernizr的帮助下实现的。

.no-js img { 
-webkit-filter: grayscale(100%); 
-webkit-filter: grayscale(1); 
filter: grayscale(100%);

filter:url(‘../img/gray.svg#grayscale‘); 
filter:gray; 
}
  OK了,你的浏览器上可以看到很炫的效果了!!

时间: 2024-11-03 21:30:59

让网页图片变灰色的三种方法的相关文章

网页图片变灰色的三种实现办法

1.CSS Filter 使用CSS过滤器属性可能是最简单的方法把图像变成灰度.以往,IE浏览器有一个专有的CSS属性称为过滤应用自定义效果包括灰度. 现在,过滤器属性是CSS3规范的一部分,并支持在一些浏览器,Firefox.Chrome和Safari.以前,我们也提到Webkit过滤器,它不仅将图像变成灰色也可以变成褐色和模糊效果. 添加如下CSS样式可以将图像变成灰色 img { -webkit-filter: grayscale(1);/* Webkit */ filter:gray;/

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用TextView支持部分Html的特性,直接用api赋图片.代码如下: //第一种方法在TextView中显示图片 String html = "<img src='" + R.drawable.circle + "'/>"; ImageGetter imgGett

Python爬取网页的三种方法

# Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://www.baidu.com').info() fopen2 = urllib2.urlopen('http://www.sina.com').info() print fopen1.getparam('charset') print fopen2.getparam('charset') #----有些

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

c# pictureBox1.Image的获得图片路径的三种方法 winform

代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 2.相对路径:Application.StartupPath; 可以得到程序根目录 string picPath=Application.StartupPath+"\\1.gif"; 3.获得网络图片的路径 this.pictureBox2.Image=

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

url下载网页的三种方法

# -*- coding: utf-8 -*- import cookielib import urllib2 url = "http://www.baidu.com" print "第一种方法" response1 = urllib2.urlopen(url) print response1.getcode() print len(response1.read()) print "第二种方法" res = urllib2.Request(url

Javascript定义类(class)的三种方法

注:本文转自阮一峰,觉得此篇文章对我对大家有帮助,因此转过来. 将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目.Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目

关于网页导航栏制作的几种方法与常见问题解决(新人向)

无序列表是html页面排版经常用到的非常实用的标签,但是新手在使用无序列表时,经常会在横向排版上出现问题,笔者在这里提供了笔者在使用无序列表制作网页导航栏时的几种方法与常见问题的解决问题.(以css内部样式为例) [注:有同学之前问过我怎么制作一张网页,但只会html,本文用到均为css.故说明:若急需制作导航,无css技术基础的,在<head>标签中加<style rel="stylesheet" type="text/css"><s