javascript - 增加或减少色彩饱和度

标签 javascript algorithm colors

我想知道增加或减少一种RGB颜色饱和度的算法

例如,如果我有颜色 rgb(200, 30, 40)(红色),函数 stub 将是

function Saturation(color, factor)
where color.r = 200, color.g= 30 and color.b=40

有人知道一个库或有一个代码片段可以做到这一点吗?

最佳答案

根据 Bali Balo 的建议,我想到了:

RGBtoHSV= function(color) {
        var r,g,b,h,s,v;
        r= color[0];
        g= color[1];
        b= color[2];
        min = Math.min( r, g, b );
        max = Math.max( r, g, b );


        v = max;
        delta = max - min;
        if( max != 0 )
            s = delta / max;        // s
        else {
            // r = g = b = 0        // s = 0, v is undefined
            s = 0;
            h = -1;
            return [h, s, undefined];
        }
        if( r === max )
            h = ( g - b ) / delta;      // between yellow & magenta
        else if( g === max )
            h = 2 + ( b - r ) / delta;  // between cyan & yellow
        else
            h = 4 + ( r - g ) / delta;  // between magenta & cyan
        h *= 60;                // degrees
        if( h < 0 )
            h += 360;
        if ( isNaN(h) )
            h = 0;
        return [h,s,v];
    };

HSVtoRGB= function(color) {
        var i;
        var h,s,v,r,g,b;
        h= color[0];
        s= color[1];
        v= color[2];
        if(s === 0 ) {
            // achromatic (grey)
            r = g = b = v;
            return [r,g,b];
        }
        h /= 60;            // sector 0 to 5
        i = Math.floor( h );
        f = h - i;          // factorial part of h
        p = v * ( 1 - s );
        q = v * ( 1 - s * f );
        t = v * ( 1 - s * ( 1 - f ) );
        switch( i ) {
            case 0:
                r = v;
                g = t;
                b = p;
                break;
            case 1:
                r = q;
                g = v;
                b = p;
                break;
            case 2:
                r = p;
                g = v;
                b = t;
                break;
            case 3:
                r = p;
                g = q;
                b = v;
                break;
            case 4:
                r = t;
                g = p;
                b = v;
                break;
            default:        // case 5:
                r = v;
                g = p;
                b = q;
                break;
        }
        return [r,g,b];
    }

通过转换为 HSV(色调、饱和度和明度)格式,您可以通过这种方式手动更改 S 分量:

var hsv= RGBtoHSV ([200,100,100]);
alert(hsv)
hsv[1] *= 1.5;
alert(hsv)
var rgb= HSVtoRGB(hsv);
alert(rgb); //new color

关于javascript - 增加或减少色彩饱和度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806483/

相关文章:

javascript - JS - 使用变量设置 Div 背景颜色

javascript - 如何检查我点击了 Bootstrap 模式打开的位置

java - 在 Java 中访问 switch 语句中的 block 是直接的吗?

algorithm - 如何在不使用对偶概念的情况下,在 O(log n) 时间内从一组点中找到距给定查询线最近的点?

macos - 如何在 OSX 上的终端中关闭 ls 输出的颜色

ios - 在 Swift 中选择行时删除标签背景颜色

javascript - 如何从 jsCalendar 中提取选定的日期值

javascript - api 中的 Google map 旅行模式

javascript - 在 POST 请求中创建用于动态下载的文件

关于测试用例失败的 Java 实践作业混淆