Це називається кольоровою інтерполяцією . Це те, що градієнти роблять під капотом. Це можна зробити, використовуючи різноманітні засоби та методи, і від того, як саме інтерполюються результати, залежить метод.
Я зазвичай роблю це для веб-проектів за допомогою 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 (і, можливо, іншу програму) для розширення кольорової інтерполяції. Однак ви можете перевірити, щоб переконатися, що метод інтерполяції є тим самим, який ви бажаєте, оскільки ви можете використовувати будь-яку функцію для інтерполяції на основі.