Это называется интерполяцией цвета . Это то, что градиенты делают под капотом. Вы можете сделать это, используя различные средства и методы, и то, как именно интерполируются результаты, зависит от метода.
Я обычно делаю это для веб-проектов, использующих JavaScript, чтобы я мог динамически менять цвета, например, в этом музыкальном визуализаторе . Реализация JavaScript, которая имеет очень простой метод линейной интерполяции с использованием RGB, взятый из примера выше, выглядит следующим образом:
// 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;
}
Который используется как и так и возвращает массив интерполированных цветов:
var colorArray = interpolateColors("rgb(94, 79, 162)", "rgb(247, 148, 89)", 5);
Вы также можете найти расширения PhotoShop (и, вероятно, других программ) для выполнения цветовой интерполяции. Тем не менее, вы можете проверить, чтобы убедиться, что метод интерполяции является тем же, который вы хотите, так как вы можете использовать любую функцию для интерполяции на основе.