根據圖片亮度自動改變前景字體顏色

昨天,我們公司漂亮的美工小姐姐跑來我身邊,戴着個大口罩,忽閃着倆大眼晴,顯得更美了.......

正當我沉浸在美景當中時,口罩後面傳來一聲嬌滴滴的聲音:“哥,求你個事唄?”

趕緊收回我的心猿意馬,正經答道:“啥事求哥,儘管講!”

她直接往我的微信裏面扔了一張圖:

然後劈頭就懟:“你瞅瞅你們寫的程序,顯示的這個標題,誰能看見啊!”

我趕緊滿臉堆笑的解釋:“不好意思,這是背景色太淺了,要不搞個深顏色的背景圖片?”

美女不依不饒:“限制了背景色,會嚴重限制我的創意空間的,再這樣下去,熬得我黑眼圈都出來了!能不能在深色背景顯示白色字,在淺色背景顯示黑色字?

我仔細瞅了瞅那個大眼睛,心想:“有個黑眼圈可能也不醜吧!”,嘴上趕緊說:“交給哥了,哥馬上給你解決!”

她轉身離去了,我已經顧不上看她妖饒的背影,趕緊找找有沒有合適的方法。

嘿,還真讓我找到了,這就是rgbaster.js。

rgbaster.js介紹

rgbaster.js是一個工具包,主要用於獲取圖片的主色,根據主色的不同,就可以設置圖片不同的文字前景色,就可以解決美女的需求了。

下載地址:https://github.com/briangonzalez/rgbaster.js/releases

簡單示例 :

先以一個示例入門

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="./rgbaster.min.js"></script>
</head>
<body>
    <img src="./test.jpg" id="testimage">
    <script type="text/javascript">
        var img = document.getElementById('testimage');
        RGBaster.colors(img, {
          success: function(payload) {
            //以下三種顏色,都是RGB格式存在
            // payload.dominant 主色
            console.log(payload.dominant);
            // payload.secondary 次色
            console.log(payload.secondary);
            // payload.palette 調色板
            console.log(payload.palette);
          }
        });
    </script>
</body>
</html>

調用是如刺的簡單,有信心了吧!

解決字體顏色與背景色衝突的問題

這裏我們只用到了主色,payload.dominant。

這裏多說兩句顏色格式,顏色格式常用的有兩種: RGB和HSB

RGB: 是三種顏色的混合 R(紅色)  G(綠色) B(藍色) ,根據這三種顏色的比例不同,可以混合出不同的顏色來。每個值的範圍都是0-255之間;

HSB:H(hues)表示色相,按0-360來形成顏色的週期,S(saturation)表示飽和度,B(brightness)表示亮度

rgbaster.js返回的RGB格式,爲了實現“深色背景顯示白色字,淺色背景顯示黑色字”的需求,需要有一點點小計算。

原理很簡單,把RGB三個顏色分量拆出來,計算一個平均值,如果平均值小於設定的閾值,即認爲是淺色背景;如果平均值大於閾值,則認爲是深背景。

直接上代碼:

RGBaster.colors(list[i].image, {
         paletteSize: 30,
         exclude: ['rgb(255,255,255)'],
         success: function(payload) {
         var newArry = payload.dominant.split('(');
         newArry = newArry[1].split(')');
         newArry = newArry[0].split(',');
         var number = 0;
         newArry.forEach((item)=>{
             number+=item*1;
         });
         if(number / 3 > 200){
            //淺色背景,設置爲黑字
             $(".title").css("color","#2c2c2c");
         }else {
            //深色背景,設置爲白字
            $(".title").css("color","#fff");
          }
        }
   });

增加以上代碼後,實現最終效果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章