您问题的最简单答案是最大化背景和文本颜色之间的距离。
如果您转换为 HSL,您可以通过最大化 L(HSV 中的 V)之间的距离来做到这一点。只需在背景亮度小于 50% 时选择白色,否则选择黑色。这是一个例子:http: //jsfiddle.net/E2kU4/
if(bgLightness < 50){
color = "white";
}else{
color = "black";
}
我认为这几乎可以解决它,但还有其他几点:
我不确定这个用例是什么。具有不同颜色字符的单词可能看起来很糟糕。通常,字幕选择单一颜色以保持一致性。
黄色由于其饱和度而确实在黑白图像中脱颖而出。此外(我不确定如何准确地说出来),与其他具有相似亮度的颜色相比,黄色具有非常高的色度。最好在HUSL页面上演示;顺便说一句,HUSL 是一个用于创建可读颜色的优秀库。
黄色很容易与深色形成对比,因为它很轻。它也不会与浅色形成对比,但这通常可以通过在字幕中添加阴影/轮廓来解决。另一个例子:http: //jsfiddle.net/E2kU4/1/
但是您可以将相同的技术(应用阴影或轮廓)应用于黑白示例以获得最大对比度。现在,轮廓与文本的对比度最大。轮廓也从背景中突出,除非这些颜色相似,在这种情况下对比度已经非常高(例如接近黑色背景、黑色轮廓、白色文本)http://jsfiddle.net/E2kU4/2/
最后,与 HSL/RGB 之间的转换应该是微不足道的。有很多图书馆可以做到这一点。