开启辅助访问 切换到窄版

打印 上一主题 下一主题

利用Shell脚本让网站更具可读性|Linux中国

[复制链接]
作者:♀寒夜♂ 
版块:
嵌入式操作系统 linux 发布时间:2021-1-27 15:19:35
13450
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
导读:
测算网站的文本和背景之间的对比度,以确保站点易于阅读。
本文字数:6167,阅读时长大约:7分钟
作者:Jim Hall
译者:Hacker
如果希望人们发现你的网站实用,那么他们需要能够阅读它。为文本选择的颜色可能会影响网站的可读性。不幸的是,网页设计中的一种流行趋势是在打印输出文本时使用低对比度的颜色,就像在白色背景上的灰色文本。对于 Web 设计师来说,这也许看起来很酷,但对于许多阅读它的人来说确实很困难。
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 脚本做到了这一点。通常,脚本执行以下操作:
1. 获取文本颜色和背景颜色
2. 计算相对亮度
3. 计算对比度
获取颜色
你可能知道显示器上的每种颜色都可以用红色、绿色和蓝色(R、G 和 B)来表示。要计算颜色的相对亮度,脚本需要知道颜色的红、绿和蓝的各个分量。理想情况下,脚本会将这些信息读取为单独的 R、G 和 B 值。 Web 设计人员可能知道他们喜欢的颜色的特定 RGB 代码,但是大多数人不知道不同颜色的 RGB 值。作为一种替代的方法是,大多数人通过 “red” 或 “gold” 或 “maroon” 之类的名称来引用颜色。
幸运的是,GNOME 的Zenity工具有一个颜色选择器应用程序,可让你使用不同的方法选择颜色,然后用可预测的格式 返回 RGB 值。使用 Zenity 可以轻松获得颜色值:
如果用户(意外地)单击 “Cancel(取消)” 按钮,脚本将假定一种颜色:
脚本对背景颜色值也执行了类似的操作,将其设置为 。
计算相对亮度
一旦你在 中设置了前景色,并在 中设置了背景色,下一步就是计算每种颜色的相对亮度。W3C 提供了一个算法用以计算颜色的相对亮度。
对于 sRGB 色彩空间,一种颜色的相对亮度定义为:
L = 0.2126 * R + 0.7152 * G + 0.0722 * B
R、G 和 B 定义为:
if RsRGBsRGB/12.92
else R = ((RsRGB+0.055)/1.055)2.4
if GsRGBsRGB/12.92
else G = ((GsRGB+0.055)/1.055)2.4
if BsRGBsRGB/12.92
else B = ((BsRGB+0.055)/1.055)2.4
RsRGB、GsRGB和 BsRGB定义为:
RsRGB= R8bit/255
GsRGB= G8bit/255
BsRGB= B8bit/255
由于 Zenity 以 的格式返回颜色值,因此脚本可以轻松拉取分隔开的 R、B 和 G 的值以计算相对亮度。AWK 可以使用逗号作为字段分隔符,并使用 字符串函数从 中提取所要的颜色值:
有关使用 AWK 提取和显示数据的更多信息,查看 AWK 备忘表
最好使用 BC 计算器来计算最终的相对亮度。BC 支持计算中所需的简单 ,这使得这一过程变得简单。但是由于 BC 无法使用非整数指数直接计算乘幂,因此需要使用自然对数替代它做一些额外的数学运算:
这会将一些指令传递给 BC,包括作为相对亮度公式一部分的 语句。接下来 BC 打印出最终值。
计算对比度
利用文本颜色和背景颜色的相对亮度,脚本就可以计算对比度了。W3C 确定对比度是使用以下公式:
(L1 + 0.05) / (L2 + 0.05),这里的 L1 是颜色较浅的相对亮度, L2 是颜色较深的相对亮度。
给定两个相对亮度值 和 ,使用 BC 计算器很容易计算对比度:
使用 语句确定哪个值( 或 )是较浅还是较深的颜色。BC 执行结果计算并打印结果,脚本可以将其存储在变量中。
最终脚本
通过以上内容,我们可以将所有内容整合到一个最终脚本。 我使用 Zenity 在文本框中显示最终结果:
最后,我希望提供有关 W3C 建议的参考信息,以提醒自己。
Zenity 颜色选择器完成了所有解释颜色的艰苦工作,用户可以通过单击色轮或输入值来选择颜色。 Zenity 接受网站上使用的标准十六进制颜色值,例如 或 或 (所有这些均为黑色)。这是白色背景上的黑色文本的示例计算:


Zenity 还识别标准的颜色名称,如“cadetblue”、“orange”或“gold”。在Zenity 中输入颜色名称,然后点击 键,Zenity 会将颜色名称转换为十六进制颜色值,如以下示例中对金色背景上的黑色文本的计算:




via:http://opensource.com/article/19/2/make-websites-more-readable-shell-script
作者:Jim Hall选题:lujun9972译者:stevenzdg988校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出
欢迎遵照 CC-BY-NC-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表