成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用Shell腳本讓網站更具可讀性

系統 Linux
為文本選擇的顏色可能會影響網站的可讀性。不幸的是,網頁設計中的一種流行趨勢是在打印輸出文本時使用低對比度的顏色,就像在白色背景上的灰色文本。對于 Web 設計師來說,這也許看起來很酷,但對于許多閱讀它的人來說確實很困難。

如果希望人們發現你的網站實用,那么他們需要能夠閱讀它。為文本選擇的顏色可能會影響網站的可讀性。不幸的是,網頁設計中的一種流行趨勢是在打印輸出文本時使用低對比度的顏色,就像在白色背景上的灰色文本。對于 Web 設計師來說,這也許看起來很酷,但對于許多閱讀它的人來說確實很困難。

[[378353]]

W3C 提供了《Web 內容可訪問性指南Web Content Accessibility Guidelines》,其中包括幫助 Web 設計人員選擇易于區分文本和背景色的指導。z這就是所謂的“對比度contrast ratio”。 W3C 定義的對比度需要進行一些計算:給定兩種顏色,首先計算每種顏色的相對亮度,然后計算對比度。對比度在 1 到 21 的范圍內(通常寫為 1:1 到 21:1)。對比度越高,文本在背景下的突出程度就越高。例如,白色背景上的黑色文本非常醒目,對比度為 21:1。對比度為 1:1 的白色背景上的白色文本不可讀。

W3C 說,正文 的對比度至少應為 4.5:1,標題至少應為 3:1。但這似乎是最低限度的要求。W3C 還建議正文至少 7:1,標題至少 4.5:1。

計算對比度可能比較麻煩,因此最好將其自動化。我已經用這個方便的 Bash 腳本做到了這一點。通常,腳本執行以下操作:

  • 獲取文本顏色和背景顏色
  • 計算相對亮度
  • 計算對比度

獲取顏色

你可能知道顯示器上的每種顏色都可以用紅色、綠色和藍色(R、G 和 B)來表示。要計算顏色的相對亮度,腳本需要知道顏色的紅、綠和藍的各個分量。理想情況下,腳本會將這些信息讀取為單獨的 R、G 和 B 值。 Web 設計人員可能知道他們喜歡的顏色的特定 RGB 代碼,但是大多數人不知道不同顏色的 RGB 值。作為一種替代的方法是,大多數人通過 “red” 或 “gold” 或 “maroon” 之類的名稱來引用顏色。

幸運的是,GNOME 的 Zenity 工具有一個顏色選擇器應用程序,可讓你使用不同的方法選擇顏色,然后用可預測的格式 rgb(R,G,B) 返回 RGB 值。使用 Zenity 可以輕松獲得顏色值:

  1. color=$( zenity --title 'Set text color' --color-selection --color='black' ) 

如果用戶(意外地)單擊 “Cancel(取消)” 按鈕,腳本將假定一種顏色:

  1. if [ $? -ne 0 ] ; then 
  2.         echo '** color canceled .. assume black' 
  3.         color='rgb(0,0,0)' 
  4. fi 

腳本對背景顏色值也執行了類似的操作,將其設置為 $background。

計算相對亮度

一旦你在 $color 中設置了前景色,并在 $background 中設置了背景色,下一步就是計算每種顏色的相對亮度。 W3C 提供了一個算法 用以計算顏色的相對亮度。

  • 對于 sRGB 色彩空間,一種顏色的相對亮度定義為:
    1. L = 0.2126 * R + 0.7152 * G + 0.0722 * B 
  • R、G 和 B 定義為:
    1. if RsRGB​ <= 0.03928 then R = RsRGB​/12.92 
    2. else R = ((RsRGB​+0.055)/1.055) 2.4  
    3. if GsRGB​ <= 0.03928 then G = GsRGB​/12.92  
    4. else G = ((GsRGB​+0.055)/1.055) 2.4  
    5. if BsRGB​ <= 0.03928 then B = BsRGB​/12.92  
    6. else B = ((BsRGB​+0.055)/1.055) 2.4 
  • RsRGB​、GsRGB​ 和 BsRGB​ 定義為:
    1. RsRGB​ = R8bit​/255 
    2. GsRGB​ = G8bit​/255 
    3. BsRGB​ = B8bit​/255 

由于 Zenity 以 rgb(R,G,B) 的格式返回顏色值,因此腳本可以輕松拉取分隔開的 R、B 和 G 的值以計算相對亮度。AWK 可以使用逗號作為字段分隔符(-F,),并使用 substr() 字符串函數從 rgb(R,G,B) 中提取所要的顏色值:

  1. R=$( echo $color | awk -F, '{print substr($1,5)}' ) 
  2. G=$( echo $color | awk -F, '{print $2}' ) 
  3. B=$( echo $color | awk -F, '{n=length($3); print substr($3,1,n-1)}' ) 

有關使用 AWK 提取和顯示數據的更多信息,查看 AWK 備忘表

最好使用 BC 計算器來計算最終的相對亮度。BC 支持計算中所需的簡單 if-then-else,這使得這一過程變得簡單。但是由于 BC 無法使用非整數指數直接計算乘冪,因此需要使用自然對數替代它做一些額外的數學運算:

  1. echo "scale=4 
  2. rsrgb=$R/255 
  3. gsrgb=$G/255 
  4. bsrgb=$B/255 
  5. if ( rsrgb <= 0.03928 ) r = rsrgb/12.92 else r = e( 2.4 * l((rsrgb+0.055)/1.055) ) 
  6. if ( gsrgb <= 0.03928 ) g = gsrgb/12.92 else g = e( 2.4 * l((gsrgb+0.055)/1.055) ) 
  7. if ( bsrgb <= 0.03928 ) b = bsrgb/12.92 else b = e( 2.4 * l((bsrgb+0.055)/1.055) ) 
  8. 0.2126 * r + 0.7152 * g + 0.0722 * b" | bc -l 

這會將一些指令傳遞給 BC,包括作為相對亮度公式一部分的 if-then-else 語句。接下來 BC 打印出最終值。

計算對比度

利用文本顏色和背景顏色的相對亮度,腳本就可以計算對比度了。 W3C 確定對比度 是使用以下公式:

(L1 + 0.05) / (L2 + 0.05),這里的 L1 是顏色較淺的相對亮度, L2 是顏色較深的相對亮度。

給定兩個相對亮度值 $r1 和 $r2,使用 BC 計算器很容易計算對比度:

  1. echo "scale=2 
  2. if ( $r1 > $r2 ) { l1=$r1; l2=$r2 } else { l1=$r2; l2=$r1 } 
  3. (l1 + 0.05) / (l2 + 0.05)" | bc 

使用 if-then-else 語句確定哪個值($r1 或 $r2)是較淺還是較深的顏色。BC 執行結果計算并打印結果,腳本可以將其存儲在變量中。

最終腳本

通過以上內容,我們可以將所有內容整合到一個最終腳本。 我使用 Zenity 在文本框中顯示最終結果:

  1. #!/bin/sh 
  2. # script to calculate contrast ratio of colors 
  3. # read color and background color: 
  4. # zenity returns values like 'rgb(255,140,0)' and 'rgb(255,255,255)' 
  5. color=$( zenity --title 'Set text color' --color-selection --color='black' ) 
  6. if [ $? -ne 0 ] ; then 
  7.         echo '** color canceled .. assume black' 
  8.         color='rgb(0,0,0)' 
  9. fi 
  10. background=$( zenity --title 'Set background color' --color-selection --color='white' ) 
  11. if [ $? -ne 0 ] ; then 
  12.         echo '** background canceled .. assume white' 
  13.         background='rgb(255,255,255)' 
  14. fi 
  15. # compute relative luminance: 
  16. function luminance() 
  17.         R=$( echo $1 | awk -F, '{print substr($1,5)}' ) 
  18.         G=$( echo $1 | awk -F, '{print $2}' ) 
  19.         B=$( echo $1 | awk -F, '{n=length($3); print substr($3,1,n-1)}' ) 
  20.         echo "scale=4 
  21. rsrgb=$R/255 
  22. gsrgb=$G/255 
  23. bsrgb=$B/255 
  24. if ( rsrgb <= 0.03928 ) r = rsrgb/12.92 else r = e( 2.4 * l((rsrgb+0.055)/1.055) ) 
  25. if ( gsrgb <= 0.03928 ) g = gsrgb/12.92 else g = e( 2.4 * l((gsrgb+0.055)/1.055) ) 
  26. if ( bsrgb <= 0.03928 ) b = bsrgb/12.92 else b = e( 2.4 * l((bsrgb+0.055)/1.055) ) 
  27. 0.2126 * r + 0.7152 * g + 0.0722 * b" | bc -l 
  28. lum1=$( luminance $color ) 
  29. lum2=$( luminance $background ) 
  30. # compute contrast 
  31. function contrast() 
  32.         echo "scale=2 
  33. if ( $1 > $2 ) { l1=$1; l2=$2 } else { l1=$2; l2=$1 } 
  34. (l1 + 0.05) / (l2 + 0.05)" | bc 
  35. rel=$( contrast $lum1 $lum2 ) 
  36. # print results 
  37. ( cat<<EOF 
  38. Color is $color on $background 
  39. Contrast ratio is $rel 
  40. Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1). 
  41. EOF 
  42. if [ ${rel%.*} -ge 4 ] ; then 
  43.         echo "Ok for body text" 
  44. else 
  45.         echo "Not good for body text" 
  46. fi 
  47. if [ ${rel%.*} -ge 3 ] ; then 
  48.         echo "Ok for title text" 
  49. else 
  50.         echo "Not good for title text" 
  51. fi 
  52. cat<<EOF 
  53. W3C 說明: 
  54. 1.4.3 對比度(最小值):文本和文本圖像的視覺呈現方式的對比度至少為 4.5:1,但以下情況除外:(AA 級) 
  55.     大文本:大文本和大文本圖像的對比度至少為 3:1; 
  56.     附帶說明:作為非活動用戶界面組件一部分,純裝飾的,任何人都不可見或圖片的一部分包含特定的其他可視內容的文本或文本圖像沒有對比度要求。 
  57.     小示意圖:徽標或商標名稱中的文本沒有最低對比度要求。 
  58. 1.4.6 對比度(增強):文本和文本圖像的視覺表示具有至少 7:1 的對比度,但以下情況除外:(AAA 級) 
  59.     大文本:大文本和大文本圖像的對比度至少為 4.5:1; 
  60.     附帶說明:作為非活動用戶界面組件一部分,純裝飾的,任何人都不可見或圖片的一部分包含特定的其他可視內容的文本或文本圖像沒有對比度要求。 
  61.   
  62.     小示意圖:徽標或商標名稱中的文本沒有最低對比度要求。 
  63. EOF 
  64. ) | zenity --text-info --title='Relative Luminance' --width=800 --height=600 

最后,我希望提供有關 W3C 建議的參考信息,以提醒自己。

Zenity 顏色選擇器完成了所有解釋顏色的艱苦工作,用戶可以通過單擊色輪或輸入值來選擇顏色。 Zenity 接受網站上使用的標準十六進制顏色值,例如 #000000 或 #000或 rgb(0,0,0)(所有這些均為黑色)。這是白色背景上的黑色文本的示例計算:

Zenity 還識別標準的顏色名稱,如“cadetblue”、“orange”或“gold”。在Zenity 中輸入顏色名稱,然后點擊 Tab 鍵,Zenity 會將顏色名稱轉換為十六進制顏色值,如以下示例中對金色背景上的黑色文本的計算:

 

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2021-06-15 09:12:19

TypeScriptTypeScript Javascript

2024-08-02 16:20:06

2021-10-09 10:24:53

Java 代碼可讀性

2021-04-01 16:43:05

代碼可讀性開發

2017-10-30 15:22:29

代碼可讀性技巧

2019-06-06 08:48:14

代碼函數編程語言

2015-08-27 13:11:18

JavaScript代碼

2020-11-08 14:36:27

pandas數據分析pipe()

2025-03-17 00:55:00

2022-08-23 14:57:43

Python技巧函數

2017-12-19 16:24:20

2022-08-29 00:37:53

Python技巧代碼

2025-05-12 10:00:00

JavaScript代碼編碼

2024-04-23 08:01:20

面向對象C 語言代碼

2023-10-30 18:05:55

Python類型

2013-11-19 17:50:33

Linux輔助軟件

2010-09-02 10:43:24

CSS文件

2014-07-28 10:28:25

程序員

2014-07-29 09:55:33

程序員代碼可讀性

2024-10-11 06:00:00

Python代碼編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九一视频在线播放 | 黄色一级大片在线免费看产 | 日韩在线资源 | 国产一区二区三区在线免费观看 | 成年人黄色一级毛片 | 日韩www| 一区二区三区网站 | 婷婷二区 | www.婷婷 | 国产成人在线视频 | 本道综合精品 | 亚洲欧美一区在线 | 手机看片169 | 一级黄a | 欧美久久天堂 | 在线中文字幕av | 国产午夜精品理论片a大结局 | 黄网免费看 | 黄色网页在线观看 | 五月天综合网 | 免费看片国产 | 久久免费看 | 日韩精品一区二区三区视频播放 | 羞羞视频在线观看免费观看 | 久草院线| 碰碰视频| 亚洲成人精品久久久 | 奇色影视 | 欧美无乱码久久久免费午夜一区 | 91一区二区三区 | 狠狠婷婷综合久久久久久妖精 | 中文字幕电影在线观看 | 99精品国产成人一区二区 | 国产粉嫩尤物极品99综合精品 | av黄色在线 | 在线观看日本高清二区 | 久久久综合久久 | 91视频在线 | 亚洲欧美日韩在线一区二区 | 一区二区av在线 | 欧美freesex黑人又粗又大 |