调整颜色对以适配ePub W3C无障碍标准的可实现算法问询
可落地的自动化色彩对比度调整方案
完全可以实现自动化调整,以下是工业界已经在批量无障碍检测工具中落地的实现逻辑:
基础计算规则
首先你需要先实现WCAG标准的对比度计算逻辑,这部分是固定无歧义的:
- 先计算颜色的相对亮度:将RGB三色通道值归一化到0~1区间,每个通道值如果≤0.03928则除以12.92,否则代入公式
((通道值 + 0.055) / 1.055) ^ 2.4计算,最终相对亮度L = 0.2126 * R + 0.7152 * G + 0.0722 * B - 对比度计算公式为
(更亮颜色的L + 0.05) / (更暗颜色的L + 0.05),你可以直接从Ace的检测结果里拿到需要满足的阈值,比如大文本是3:1,普通文本是4.5:1
最小改动调整算法
推荐两种适配不同场景的方案,都能保证颜色改动幅度最小:
方案1:优先保留指定颜色(适配有设计倾向性的场景)
大部分场景下设计会有倾向保留的颜色,比如品牌色作为前景、或者主题背景色,优先固定该颜色调整另一个即可:
- 把需要调整的颜色转换为HSL色彩空间,调整时只改动亮度L分量,保留色相H和饱和度S不变,就能最大程度保留原有颜色的视觉特征
- 用二分法调整L分量:如果当前对比度不足,看要调整的颜色比固定色亮还是暗,亮就抬升L值,暗就降低L值,每次调整后重新计算对比度,直到刚好达到要求的阈值就停止,此时改动幅度最小
- 加兜底逻辑:如果调整后的L值超过95%或者低于5%,说明调整该颜色的幅度过大,自动切换为固定另一个颜色调整,比如浅黄背景配白字的场景,调背景需要大幅加深的话,直接把前景文字改成黑色即可
方案2:双颜色均可微调的场景
如果两个颜色都允许改动,可以用最小二乘优化求解:
- 把两个颜色的RGB通道改动量的平方和作为损失函数,把对比度≥要求阈值作为约束条件
- 用梯度下降或者简单的线性规划就能求解,得到的结果就是视觉上改动幅度最小的配色组合
落地优化建议
你可以加一个简单的配置项,让使用人员选择优先保留前景还是背景,即可解决你提到的主观性问题,不需要人工干预就能批量处理所有Ace检测出来的对比度问题。
内容的提问来源于stack exchange,提问作者jfix
相关产品推荐
相关产品推荐

