Isso é chamado de interpolação de cores . É o que os gradientes fazem sob o capô. Você pode fazer isso usando uma variedade de meios e métodos, e exatamente como os resultados são interpolados depende do método.
Geralmente, faço isso em projetos da Web usando JavaScript, para poder alterar dinamicamente as cores, como neste visualizador de música . Uma implementação JavaScript que possui um método muito direto de interpolação linear usando RGB, extraído do exemplo acima, é o seguinte:
// Returns a single rgb color interpolation between given rgb color
// based on the factor given; via https://codepen.io/njmcode/pen/axoyD?editors=0010
function interpolateColor(color1, color2, factor) {
if (arguments.length < 3) {
factor = 0.5;
}
var result = color1.slice();
for (var i = 0; i < 3; i++) {
result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
}
return result;
};
// My function to interpolate between two colors completely, returning an array
function interpolateColors(color1, color2, steps) {
var stepFactor = 1 / (steps - 1),
interpolatedColorArray = [];
color1 = color1.match(/\d+/g).map(Number);
color2 = color2.match(/\d+/g).map(Number);
for(var i = 0; i < steps; i++) {
interpolatedColorArray.push(interpolateColor(color1, color2, stepFactor * i));
}
return interpolatedColorArray;
}
Que é usado assim e retorna uma matriz das cores interpoladas:
var colorArray = interpolateColors("rgb(94, 79, 162)", "rgb(247, 148, 89)", 5);
Você também pode encontrar extensões do PhotoShop (e provavelmente de outro programa) para realizar a interpolação de cores. No entanto, convém verificar se o método de interpolação é o mesmo que você deseja, pois é possível usar qualquer função para interpolar com base.