使用CSS3編寫灰階濾鏡來制作黑白照片效果的方法

CSS3 中的濾鏡(filter)功能讓我們輕松方便簡單的處理圖片,而不需要使用 PhotoShop 或者使用很多 JavaScript、PHP 代碼。這個屬性已經(jīng)得到比較新的 Firefox、Safari、Chrome 瀏覽器支持,而且我們可以通過綜合的可替代的技術(shù)來模擬實(shí)現(xiàn)這個效果——甚至是 IE 瀏覽器。
本文中,我們將使用標(biāo)準(zhǔn)測試圖片 Lena Söderberg (譯者注:Lena 這張美女照片,被作為圖片壓縮的標(biāo)準(zhǔn)測試用圖片)作為演示,使用 CSS 將其轉(zhuǎn)換成黑白圖片。在下面我將講解如何使用 CSS 的這個功能實(shí)現(xiàn)調(diào)整色調(diào)、模糊、亮度、對比度和一些其他的效果。效果圖:
CSS3 的灰階濾鏡
使用 CSS3 來稀釋一個圖片的顏色,再簡單不過了。我們可以把這個 CSS 語句寫成一個類,這樣遇到想要效果的圖片,直接加上個類就可以了。
- img.desaturate { filter: grayscale(100%); }
當(dāng)然,當(dāng)前的瀏覽器在使用 CSS3 的時候,要加上他們自己的瀏覽器功能實(shí)驗(yàn)性前綴,所以,我們首先要做的,就是寫上瀏覽器的前綴:
- img.desaturate { filter: grayscale(100%);
- -webkit-filter: grayscale(100%);
- -moz-filter: grayscale(100%);
- -ms-filter: grayscale(100%);
- -o-filter: grayscale(100%);
- }
想要用在某個圖片上很簡單,加上一個類:
- <img src=lena-söderberg.png alt="Lena Söderberg" style=width:512px;height:512px class=desaturate>
這就可以了。 ## 增加一個 SVG 的濾鏡效果 這個功能目前只在 Chrome 18+ 有效,其他瀏覽器馬上就會增加支持。為了在 Firefox 4+ 中得到相同的效果,我們可以需要使用 SVG 濾鏡。我把新建了一個單獨(dú)的文件 的 saturate.svg ,代碼如下:
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg">
- <filter id="greyscale">
- <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>
不要被這段 SVG 代碼嚇住了——雖然上面的矩陣數(shù)列有點(diǎn)復(fù)雜。這段代碼我推薦你直接復(fù)制粘貼成一個通用的“小文件”。我會再寫一篇文章詳細(xì)介紹一下上面矩陣變化,在這里不再贅述。 加上上面的 SVG 文件引用,我們要插入 HTML 頁面的 CSS 代碼如下:
- img.desaturate{
- filter: grayscale(100%);
- -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%);
- -ms-filter: grayscale(100%); -o-filter: grayscale(100%);
- filter: url(desaturate.svg#greyscale);
- }
為 IE 做兼容:
到現(xiàn)在我們的代碼可以兼容未來的瀏覽器,和最新版的 Chrome 、 Firefox 4+。為了讓 IE 6-9 加入兼容列表,我們需要使用微軟的笨拙但是有效的 filter 濾鏡:
- img.desaturate{
- filter: grayscale(100%);
- -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%);
- -ms-filter: grayscale(100%); -o-filter: grayscale(100%);
- filter: url(desaturate.svg#greyscale);
- filter: gray;
- }
如果你還想做老版本的 Webkit 內(nèi)核瀏覽器的兼容:
- img.desaturate{
- filter: grayscale(100%);
- -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%);
- -ms-filter: grayscale(100%); -o-filter: grayscale(100%);
- filter: url(desaturate.svg#greyscale);
- filter: gray;
- -webkit-filter: grayscale(1);
- }
如果你想要在所有的瀏覽器中實(shí)現(xiàn)這個視覺效果(假設(shè)你的訪問者都支持 JavaScript)你可以使用 jQuery 或者 Greyscale.js 來修改你的圖片,使其去色。
上面咱們寫的 CSS 代碼可以讓我們不需要使用 PhotoShop 就可以把圖片變成黑白的。使用 CSS 來實(shí)現(xiàn)這個功能,可以非常容易修改:例如,你可以看到當(dāng)我們把去色程度參數(shù)從 100% 變成 50% 的時候圖片會是原色和黑白融合在一起的效果。
其他效果:
此外,黑白照片上還可以添加其他的一些filter的效果有:
- -webkit-filter:blur(5px); //模糊,此處為5像素
- -webkit-filter:sepia(0.5); //疊加褐色,取值范圍0-1,此處表示50%的褐色
- -webkit-filter:brightness(0.5); //亮度,取值范圍0-1,5倍亮度(數(shù)字為0時為正常樣式,為1時表示的是100%亮度,無法看到圖片)
- -webkit-filter:hue-rotate(30deg); //色相(按照色相環(huán)進(jìn)行旋轉(zhuǎn),順時針方向,紅-橙-黃-黃綠-綠-藍(lán)綠-藍(lán)-藍(lán)紫-紫-紫紅-紅)此處為疊加黃色濾鏡
- -webkit-filter:invert(1); //反色,取值范圍0-1,0為原圖,1為徹底反色之后,0.5為灰色
- -webkit-filter:saturate(4); //飽和度,取值范圍0~*,0為無飽和度,1為原圖,值越高飽和度越大
- -webkit-filter:contrast(2); //對比度,取值范圍0~*,0為無對比度(灰色),1為原圖,值越高對比度越大
- -webkit-filter:opacity(0.8); //透明度,取值范圍0~1,0為全透明,1為原圖
- -webkit-filter:drop-shadow(17px 17px 20px black); //陰影
相關(guān)文章
CSS3 實(shí)用技巧:實(shí)現(xiàn)黑白圖像效果示例代碼
本文為大家詳細(xì)介紹下CSS3實(shí)現(xiàn)黑白圖像效果的具體思路及代碼,感興趣的朋友可以看下截圖,希望對大家有所幫助2013-07-11css 圖片變黑白效果 使用CSS將圖片轉(zhuǎn)換成黑白的
時代發(fā)展,如今,CSS3的逐步推進(jìn),我們也開始看到“黑白效果”大規(guī)模應(yīng)用于實(shí)際的可能,接下來介紹CSS3 greyscale 濾鏡實(shí)現(xiàn),感興趣的朋友可以了解下2013-01-08基于jquery+css來實(shí)現(xiàn)鼠標(biāo)滑過圖片黑白顯示的特效
鼠標(biāo)經(jīng)過圖片時.圖片變成黑白色的2012-08-29網(wǎng)站變黑白色CSS一行代碼實(shí)現(xiàn)
5.12地震給四川帶來了巨大災(zāi)難,5月19日到5月21日為全國哀悼日,有很多網(wǎng)站界面今天都變成了黑白色,從而紀(jì)念那些在地震中死去的逝者2008-10-17- 2008.5.12四川汶川大地震,帶走了很多生命,令人惋惜,為了表示對遇難同胞的深切哀悼,決定2008年5月19日至21日為全國哀悼日。在此期間,許多網(wǎng)站將風(fēng)格改為“黑、白、灰”2020-04-04