我怎样才能获得两种颜色之间的颜色?
我有两种颜色:
#15293E #012549
我怎么能find他们之间的一半颜色? 有没有办法做这个计算?
正如李斯特先生刚才所说,用任何编程语言自动化计算都很容易:
- 把你的两种颜色分成红色,绿色,蓝色的三种颜色:(r1,g1,b1)和(r2,g2,b2)。
- 例如#15293E,#012549变成(“15”,“29”,“3E”),(“01”,“25”,“49”)
- 将每个颜色string转换为一个整数,明确指出您正在parsing数字的基于hex的表示forms。
- 例如(“15”,“29”,“3E”)变成(21,41,62)
- 计算平均值(r',g',b')=((r1 + r2)/ 2,(g1 + g2)/ 2,(b1 + b2)/ 2)。
- 例如((21 + 1)/ 2,(41 + 37)/ 2,(62 + 73)/ 2)=(11,39,67)
- 再次将它们转换为string,明确指出您正在生成两位hex表示(必要时填充零)。
- 例如(11,39,67)→(“0B”,“27”,“43”)
- 连接一个清晰的字符,然后是3个string
- 例如(“0B”,“27”,“43”) – > “#0B2743”
编辑:如我最初所说,实现不是“非常容易”。 我花时间在Programming-Idioms上用几种语言编写代码。
我使用这个网站为我做这个任务: ColorBlender 。
中间颜色将是#0B2744
。
less了
如果你使用最新的LESS CSS预处理器,那么它们是一个函数( mix()
),
mix(#15293E, #012549, 50%)
输出: #0b2744
。
如果你需要做到这一点,并期望在更多的情况下中间色彩在视觉上是准确的(即中间点的视觉色彩和色调应该“看起来是正确的”,观众),那么如上所述,你可能想要计算中点之前从RGB转换为HSV或HSL,然后再转换回来。 这可能与直接平均RGB值有很大的不同。
下面是一些用于从HSL转换到HSL的JavaScript代码,我在简短的search中find了这些代码,并且在一个简单的检查上看起来是正确的:
只需将rgbToHsl函数应用于您的两个r,g,b颜色向量,对两个结果向量进行平均,然后将hslToRgb应用于该向量。 。 。
喜欢这个:
function colourGradientor(p, rgb_beginning, rgb_end){ var w = p * 2 - 1; var w1 = (w + 1) / 2.0; var w2 = 1 - w1; var rgb = [parseInt(rgb_beginning[0] * w1 + rgb_end[0] * w2), parseInt(rgb_beginning[1] * w1 + rgb_end[1] * w2), parseInt(rgb_beginning[2] * w1 + rgb_end[2] * w2)]; return rgb; };
其中p是介于0和1之间的值,指定颜色应该在渐变中有多远,rgb_beginning是来自颜色,rgb_end是来自颜色。 两者都是[r,g,b]数组,所以你必须先从hex转换。 这是LESS的混音function的简化版本,我认为是来自SASS。 海报p是0.5
Handy-Dandyfunction
function padToTwo(numberString) { if (numberString.length < 2) { numberString = '0' + numberString; } return numberString; } function hexAverage() { var args = Array.prototype.slice.call(arguments); return args.reduce(function (previousValue, currentValue) { return currentValue .replace(/^#/, '') .match(/.{2}/g) .map(function (value, index) { return previousValue[index] + parseInt(value, 16); }); }, [0, 0, 0]) .reduce(function (previousValue, currentValue) { return previousValue + padToTwo(Math.floor(currentValue / args.length).toString(16)); }, '#'); } console.log(hexAverage('#111111', '#333333')); // => #222222 console.log(hexAverage('#111111', '#222222')); // => #191919 console.log(hexAverage('#111111', '#222222', '#333333')); // => #222222 console.log(hexAverage('#000483', '#004B39')); // => #00275e
如果你希望你可以用Windows计算器自己做。
- 打开Windows计算器>查看>程序员
- selecthex选项
- inputhex值
- 切换到十二月,并写下给定的值
- 对第二个hex值重复步骤2-4
- 通过添加两个Dec数字并除以2来计算平均值
- 将此值input到计算器中,并selectDec选项,然后切换到hex选项和瞧
例:
- 15293E(HEX)= 1386814(DEC)
- 012549(HEX)= 75081(DEC)
- 中点=(1386814 + 75081)/ 2
- 中点= 730947(DEC)
- 730947(DEC)= 0B2743(HEX)
- #0B2743
或者如上所述使用ColorBlender;)