我正在寻找一种基于Ruby百分比生成渐进十六进制颜色的方法。
0% = #6da94a
50% = #decc30
100% = #ce2d4a
然后以编程方式生成它们之间的十六进制值。
所以我可能会有类似percent_to_hex(10)
的东西,并且会在0%(绿色)和50%(黄色)之间的渐变梯度上吐出10%的十六进制值。
答案 0 :(得分:2)
实际上,在tralston的答案中存在一个小错误。
(x + percent * 100 * (y - x)).round
应更改为:
(x + percent / 100.0 * (y - x)).round
如果你有0(255),那么i.to_s(16)
也会有问题,因为你可以得到像“ff0ff”这样的结果。我建议改为使用"%02x" % i
。
以下是完整的示例:
def percent_to_hex(percent, start, stop)
colors = [start,stop].map do |c|
c.scan(/../).map { |s| s.to_i(16) }
end
colors_int = colors.transpose.map do |x,y|
(x + percent / 100.0 * (y - x)).round
end
colors_int.map { |i| "%02x" % i }.join("")
end
答案 1 :(得分:0)
这不是一个非常精致的方法,但这是一个良好的开端:
# Example input: percent_to_hex(25, "abcdef", "ffffff") => "c0daf3"
def percent_to_hex(percent, start, stop)
colors = [start,stop].map do |c|
c.scan(/../).map { |s| s.to_i(16) }
end
colors_int = colors.transpose.map do |x,y|
(x + percent * 100 * (y - x)).round
end
colors_int.map { |i| i.to_s(16) }.join("")
end
当然,如果您可以进一步自定义它来添加或删除前导"#"十六进制颜色代码等