在css中,可以使用filter屬性來改變圖片的顏色,只需要給圖片元素設定「filter:樣式值」樣式即可。 filter屬性設定或檢索物件所套用的濾鏡效果,定義了元素的視覺效果(例如:模糊與飽和度)。
本教學操作環境:windows7系統、CSS3&&HTML5版、Dell G3電腦。
說到對圖片進行處理,我們常常會想到PhotoShop這類的影像處理工具。身為前端開發者,我們常常需要處理一些特效,例如根據不同的狀態,讓圖示顯示不同的顏色。或者是hover的時候,對圖片的對比度,陰影進行處理。
你以為這些是經過PS軟體處理出來的?不不不,純粹的是用css寫出來的,很神奇把。
CSS濾鏡(filter)屬提供的圖形特效,像模糊,銳利化或元素變色。濾鏡通常被用於調整圖片,背景和邊界的渲染。 MDN
CSS標準裡包含了一些已實現預先定義效果的函數。
filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
<!--html--> <img src="https://note.youdao.com/yws/res/237/WEBRESOURCE7e77df2551fe1a1db1b9d91f4d518917" alt="原图">
filter: none
沒有任何效果,預設filter就為none
filter:blur( ) 高斯模糊
給圖像一個高斯模糊效果,length值越大,圖像越模糊
我們來嘗試一下
img { filter:blur(2px);; }
brightness(%) 線性乘法
可以讓圖片看起來更亮或更暗
img { filter:brightness(70%); }
#contrast(%) 對比度
調整影像的對比。
img { filter:contrast(50%); }
drop-shadow(h-shadow v-shadow blur spread color)
給圖片設定一個陰影效果。陰影是合成在影像下面,可以有模糊度的,可以以特定顏色畫出的遮罩圖的偏移版本。函數接受2682287aecd16e99c4f70c025ad645ed(在CSS3背景定義)類型的值,除了"inset"關鍵字是不允許的。函數與現有的box-shadow box-shadow屬性很相似;不同之處在於,通濾鏡,有些瀏覽器為了更好的效能會提供硬體加速
利用這個方案,我們其實改變類似於一些圖示的顏色,例如黑色的圖示變成藍色的圖示。
PNG格式小圖示的CSS任意顏色賦色技術
img { filter: drop-shadow(705px 0 0 #ccc); }
在這裡,我們將圖片投影形成一個同等大小的灰色區域。
hue-rotate(deg) 色相旋轉
img { filter:hue-rotate(70deg); }
看,小姐姐變成阿凡達了!
invert(%) 反轉
這個函數的作用是反轉輸入影像,有點像是曝光的效果
img { filter:invert(100%) }
grayscale(%) 將影像轉換為灰階影像
這個效果可以將圖片做舊,有一種時代滄桑感。喜歡古風的人一定會喜歡上這個效果的
img { filter:grayscale(80%); }
除了古風還有一種用法是有的時候需要將全站變成灰色,如大屠殺紀念日的時候。
可以這樣設定
*{ filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); }
sepia(%) 將影像轉換為深褐色
下面給我的小姐姐一個暖暖的色調。
img { filter:sepia(50%) }
大家是不是發現我並沒有把url()方法寫到這上面來
沒錯,因為我想把這個內容放到最後來說,filter:url()就是css濾鏡改變圖片的終極方法。 CSS:filter可以匯入一個svg濾鏡,作為他自己的濾鏡。
為什麼說filter:url()是圖片變色的終極解決方案呢,請容我慢慢道來。
我们先科普一下PS的工作原理,我们都知道网页是有三原色的R(红) G(绿) B(蓝),常见的RGBA还包括一个opicity值,而opcity值是根据alpha通道计算出来的。也就是说,我们见到的网页的每一个像素点都是由红蓝绿再加alpha四个通道组成,每一个通道我们称之为色板,PS中的8位板的意思就是2的八次方256,意思就是每一个通道的取值范围都是(0-255) SVG 研究之路 (11) - filter:feColorMatrix
如果我们可以改变每个通道的值是不是就能完美的得到我们想要的任意颜色了呢,原理上,我们可以像ps那样利用svg滤镜得到任何我们想要的图像,不仅仅是变色。我们甚至可以凭空生成一幅图像。
svg feColorMatrix大法好
<svg height="0" xmlns="http://www.w3.org/2000/svg"> <defs> <filter id="change"> <feColorMatrix type="matrix" values=" 0 0 0 0 0.55 0 0 0 0 0.23 0 0 0 0 0 0 0 0 0 1" /> </filter> </defs> </svg> <img src="https://note.youdao.com/yws/res/237/WEBRESOURCE7e77df2551fe1a1db1b9d91f4d518917" alt="">
img { filter:url(#change); }
通过单通道我们可以将图片变成单一的颜色
<svg height="0" xmlns="http://www.w3.org/2000/svg"> <defs> <filter id="change"> <feColorMatrix values="3 -1 -1 0 0 -1 3 -1 0 0 -1 -1 3 0 0 0 0 0 1 0" /> </filter> </defs> </svg>
通过双通道我们可以的到一些非常炫酷的PS效果
当然,在这里,只是举个例子,通过配置矩阵中的值,我们可以配置每一个像素点的值按照我们定义的规则显示
我们在这里详细讲一下feColorMatrix 矩阵的计算方式
其中Rin Gi
n Bin a(alpha) 为原始图片中每个像素点的rgba值
通过矩阵计算,得到的Rout Gout Bout Aout就是最终显示出来的rgba值。
将图片转为单色 拿棕色rgba(140,59,0,1)作为例子
根据上面的公式,我们可以简化一些计算,同一行中,只设置一个通道的值,其他通道为0
不难得出矩阵
0 0 0 0 目标值R 0 0 0 0 目标值G 0 0 0 0 目标值B 0 0 0 0 1
根据规则,只需要计算,255/想要显示的颜色对应通道 = 目标值
我们想要的棕色rgba(140,59,0,1) 换算成色板 rgba 为 140 59 0 255
可以算出目标值
0 0 0 0 0.55 0 0 0 0 0.23 0 0 0 0 0 0 0 0 0 1
总结
推荐学习:css视频教程
以上是css如何改變圖片的顏色的詳細內容。更多資訊請關注PHP中文網其他相關文章!