Я знаю, что это не так, как раньше, но да, я могу заставить FtpWebRequest работать с прокси-сервером ftp, используя старые трюки настройки URL-адреса для
"ftp://your.proxy.server/theFileToDownload")"
Тогда установите свои учетные данные в сети
username="ftpUserName@ftp.realserver.com"
и
password="password".
Я помню, как это делалось в плохие старые дни WININET, а иногда старые трюки по-прежнему являются лучшими трюками.
YMMV, конечно.
Если вы используете последний препроцессор LESS CSS , то вы заметите, что есть функция (mix()
), которая делает это:
mix(#15293E, #012549, 50%)
Выходы: #0b2744
.
Я просто написал функцию, которая вычисляет цвета между двумя цветами, поэтому здесь она на случай, если кому-то это нужно, я думаю, что она довольно короткая и читаемая, она принимает два цвета в шестнадцатеричных строках и количество цветов для вычисления между ними, возвращает цвета в массиве шестнадцатеричных строк
Я взял функции rgbToHex и hexToRgb из здесь
Надеюсь, что это поможет!
function rgbToHex(r, g, b) {
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
function hexToRgb(hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result
? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
}
: null;
}
// returns an array of startColor, colors between according to steps, and endColor
function getRamp(startColor, endColor, steps) {
var ramp = [];
ramp.push(startColor);
var startColorRgb = hexToRgb(startColor);
var endColorRgb = hexToRgb(endColor);
var rInc = Math.round((endColorRgb.r - startColorRgb.r) / (steps+1));
var gInc = Math.round((endColorRgb.g - startColorRgb.g) / (steps+1));
var bInc = Math.round((endColorRgb.b - startColorRgb.b) / (steps+1));
for (var i = 0; i < steps; i++) {
startColorRgb.r += rInc;
startColorRgb.g += gInc;
startColorRgb.b += bInc;
ramp.push(rgbToHex(startColorRgb.r, startColorRgb.g, startColorRgb.b));
}
ramp.push(endColor);
return ramp;
}
Если вы так хотели, вы могли бы сделать это самостоятельно с помощью калькулятора Windows.
Пример:
или используйте ColorBlender, как указано выше;)
Как сказал мистер Листер, легко автоматизировать вычисления с любым языком программирования:
Редактирование: реализация не очень проста, как я изначально заявил. Я потратил время, чтобы написать код на нескольких языках по Программированию-Идиомы .
Я использую этот сайт для выполнения этой задачи для меня: ColorBlender .
Средний цвет будет #0B2744
.
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
hexAverage('#000483', '#004B39')
имеет этот результат "# 0275e" , который действительно не работает нормально
– axel
10 April 2015 в 14:47
#0088CE, #00B8CF
создает #0a0ce
вместо #00a0ce
.
– Pekka
18 May 2015 в 16:25
Нравится это:
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], поэтому вам сначала нужно будет преобразовать из шестнадцатеричного. Это упрощенная версия функции смешивания LESS, которая, как мне кажется, принадлежит SASS. Для плаката p будет 0,5
Если вам нужно сделать это в общем случае и ожидайте, что средний цвет будет визуально точным в большем числе случаев (т. е. визуальный цвет и тон средней точки должны «выглядеть правильно» для зрителя), то, как было предложено выше, вы может конвертировать из RGB в HSV или HSL перед вычислением средней точки, а затем конвертировать обратно. Это может значительно отличаться от значений среднего значения RGB.
Вот какой код JavaScript для преобразования в / из HSL, который я нашел при кратком поиске, и что при краткой проверке, похоже, поступает правильно:
Просто примените функцию rgbToHsl к вашим двум векторным векторам r, g, b, усредните два результирующих вектора и примените к ним hslToRgb. , .