讓網(wǎng)站圖片生成灰色效果的三種方法
發(fā)布時(shí)間:2014-03-20 16:24:01 作者:佚名
我要評(píng)論

很多圖片編輯如Photoshop很容易把你的彩色圖像變成灰度,不幸的是,這樣的效果想做在網(wǎng)絡(luò)上并不容易,下面為大家介紹下三種讓網(wǎng)站圖片生成灰色效果的方法
我一直喜歡灰度圖像因?yàn)槲艺J(rèn)為他們看起來(lái)更有藝術(shù)感。很多圖片編輯如Photoshop很容易把你的彩色圖像變成灰度。甚至有選擇調(diào)整顏色深度和色調(diào)。不幸的是,這樣的效果想做在網(wǎng)絡(luò)上并不容易,因?yàn)闉g覽器有差異。
1、CSS Filter
使用CSS過(guò)濾器屬性可能是最簡(jiǎn)單的方法把圖像變成灰度。以往,IE瀏覽器有一個(gè)專有的CSS屬性稱為過(guò)濾應(yīng)用自定義效果包括灰度。
現(xiàn)在,過(guò)濾器屬性是CSS3規(guī)范的一部分,并支持在一些瀏覽器,Firefox、Chrome和Safari。以前,我們也提到Webkit過(guò)濾器,它不僅將圖像變成灰色也可以變成褐色和模糊效果。
添加如下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上無(wú)效果。)
2、Javascript
第二種方法是通過(guò)使用JavaScript技術(shù)上應(yīng)該支持所有JavaScript的瀏覽器,包括IE6以下
var imgObj = document.getElementById('js-image');
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);
3、SVG
第三種方法來(lái)自SVG Filter.,你需要?jiǎng)?chuàng)建一個(gè)SVG文件,并將以下代碼寫在里面,保存命名為***.svg
<svg xmlns="http://www.w3.org/2000/svg">
<filter id="grayscale">
<feColorMatrix type="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>
然后利用過(guò)濾器的屬性,我們可以通過(guò)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");')
}
總結(jié)
為了能過(guò)跨瀏覽器支持灰度的效果,我們可以把上述方法和一起使用下面的代碼片段去實(shí)現(xiàn)。這段代碼將支持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被禁用。這個(gè)想法可以很容易地Modernizr的幫助下實(shí)現(xiàn)的。
.no-js img {
-webkit-filter: grayscale(100%);
-webkit-filter: grayscale(1);
filter: grayscale(100%);
filter: url('../img/gray.svg#grayscale');
filter: gray;
}
OK了,你的瀏覽器上可以看到很炫的效果了??!
1、CSS Filter
使用CSS過(guò)濾器屬性可能是最簡(jiǎn)單的方法把圖像變成灰度。以往,IE瀏覽器有一個(gè)專有的CSS屬性稱為過(guò)濾應(yīng)用自定義效果包括灰度。
現(xiàn)在,過(guò)濾器屬性是CSS3規(guī)范的一部分,并支持在一些瀏覽器,Firefox、Chrome和Safari。以前,我們也提到Webkit過(guò)濾器,它不僅將圖像變成灰色也可以變成褐色和模糊效果。
添加如下CSS樣式可以將圖像變成灰色
復(fù)制代碼
代碼如下: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上無(wú)效果。)
2、Javascript
第二種方法是通過(guò)使用JavaScript技術(shù)上應(yīng)該支持所有JavaScript的瀏覽器,包括IE6以下
復(fù)制代碼
代碼如下:var imgObj = document.getElementById('js-image');
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);
3、SVG
第三種方法來(lái)自SVG Filter.,你需要?jiǎng)?chuàng)建一個(gè)SVG文件,并將以下代碼寫在里面,保存命名為***.svg
復(fù)制代碼
代碼如下:<svg xmlns="http://www.w3.org/2000/svg">
<filter id="grayscale">
<feColorMatrix type="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>
然后利用過(guò)濾器的屬性,我們可以通過(guò)SVG文件中的元素的ID連接SVG文件
復(fù)制代碼
代碼如下:img {
filter: url('img/gray.svg#grayscale');
}
你也可以把它放到CSS文件中,例如:
復(fù)制代碼
代碼如下: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");')
}
總結(jié)
為了能過(guò)跨瀏覽器支持灰度的效果,我們可以把上述方法和一起使用下面的代碼片段去實(shí)現(xiàn)。這段代碼將支持Firefox 3.5+, Opera 15+, Safari, Chrome, and IE
復(fù)制代碼
代碼如下:img {
-webkit-filter: grayscale(100%);
-webkit-filter: grayscale(1);
filter: grayscale(100%);
filter: url('../img/gray.svg#grayscale');
filter: gray;
}
我們可以利用上面的代碼和JavaScript方法和只提供CSS濾波器作為后備以防JavaScript被禁用。這個(gè)想法可以很容易地Modernizr的幫助下實(shí)現(xiàn)的。
復(fù)制代碼
代碼如下:.no-js img {
-webkit-filter: grayscale(100%);
-webkit-filter: grayscale(1);
filter: grayscale(100%);
filter: url('../img/gray.svg#grayscale');
filter: gray;
}
OK了,你的瀏覽器上可以看到很炫的效果了??!
相關(guān)文章
利用CSS將網(wǎng)站網(wǎng)頁(yè)變灰色代碼示例
這篇文章主要給大家介紹了關(guān)于利用CSS將網(wǎng)站網(wǎng)頁(yè)變灰色的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看2017-07-04- 一句css代碼讓你的網(wǎng)站變灰,包括圖片,支持所有瀏覽器。一起悼念地震中逝去的生命!2020-04-04
- 2008.5.12四川汶川大地震,帶走了很多生命,令人惋惜,為了表示對(duì)遇難同胞的深切哀悼,決定2008年5月19日至21日為全國(guó)哀悼日。在此期間,許多網(wǎng)站將風(fēng)格改為“黑、白、灰”2020-04-04
修改CSS樣式實(shí)現(xiàn)網(wǎng)頁(yè)灰色(沒(méi)有顏色只有淺色黑白)的幾個(gè)方法整理
一般在清明節(jié),全國(guó)哀悼日,大地震的日子,還有這次疫情,以及一些影響力很大的偉人逝世或紀(jì)念日的時(shí)候,身為站長(zhǎng)的我們都會(huì)響應(yīng)國(guó)家的號(hào)召讓自己的網(wǎng)站的全部網(wǎng)頁(yè)變成灰色2020-04-04