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

例如,如果我有颜色rgb(200,30,40)(红色)函数存根

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

任何人都知道一个图书馆或有一个代码片段吗?

解决方法

按照巴厘岛巴洛的建议,我提出了:
RGBtoHSV= function(color) {
        var r,g,b,h,s,v;
        r= color[0];
        g= color[1];
        b= color[2];
        min = Math.min( r,b );
        max = Math.max( r,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,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,v];
    };

HSVtoRGB= function(color) {
        var i;
        var h,v,r,b;
        h= color[0];
        s= color[1];
        v= color[2];
        if(s === 0 ) {
            // achromatic (grey)
            r = g = b = v;
            return [r,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,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 – 增加或减少颜色饱和度的更多相关文章

  1. Swift带振动效果的UITextField

    代码中有注释,就直接上代码了函数调用效果图回调函数打印

  2. 在Swift中的ios-MIN()和MAX(),并将Int转换为CGFloat

    2)如何在第二种方法中使用等价的ObjC的MIN()和MAX()?您必须使用Int作为输入来初始化CGFloat。

  3. swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?

    编辑我能够通过以下调整解决问题,但我仍无法解释原因.Int整数类型是iPhone5上的32位整数和5S上的64位整数.由于arc4random()返回一个UInt32,它在iPhone5上具有两倍于Int的正范围,因此你的第一个版本基本上有50%的机会在这一行崩溃:您的修改版本等待转换,直到您使用max的模数和,因此在那里转换为Int是安全的.您应该查看arc4random_uniform,它为您处理模数并避免当前实现中固有的偏差.

  4. php – 在sphinx中使用main和delta索引

    -rotate将在tmp中构建索引,并在完成后重新启动searchd.关于delta,您需要使用预查询来计算“limit”max主要索引id低于限制,delta是达到此限制.如果你有一个时间戳,你可以使用它主–>其中timefile其中timefile>=today()

  5. PHP GD如何通过一行绘制文本

    最终输出应该像图像:这是我在做什么:–目前的输出如下:任何人都可以告诉我的代码有什么问题吗?谢谢好的,一直在玩.尝试更换:附:输出您的值:输出与其他值:

  6. php – 打包并解压缩64位整数

    我有以下代码:结果我得到-1我正在使用PHP5.4.6-1ubuntu1.1(cli)(内置:2012年11月15日01:18:34)我的PHP_INT_MAx等于9223372036854775807有没有办法使用pack函数和64位整数?改为将其保存为两个32位:>算法取自:http://php.net/pack#109328>示例:http://codepad.viper-7.com/UuL

  7. php – 如何在Drupal 6中的一个模块中创建多个不同的块?

    我正在使用hook_block创建一个块,其中包含我正在创建的自定义模块的名称.我不能在不使用myModuleName_block的情况下创建块.我是否需要为我想要创建的每个不同的块执行不同的模块?

  8. Centos Linux下查看服务器信息的方法

    CentosLinux下查看服务器信息的方法经常有客户咨询云志互联查看服务器一些硬件配置的方法,下面将以Centos为例,将各种信息的查看方法与用户分享。即delta/sw/s:每秒完成的写I/O设备次数。是rsect/s的一半,因为每扇区大小为512字节。

  9. PHP max()和min()使用不同类型的奇怪行为

    过去两个小时我一直在摸索这个行为:打印出来:当我期待:请注意,max()和min()函数的值始终相同,但顺序不同.此外,根据文档,与整数相比,不以数字字符开头的字符串被评估为整数0,但是字母数字比较多个字符串值.资源:>http://php.net/manual/en/function.max.php>http://php.net/manual/en/function.min.php如何解释这个输

  10. 通过Ansible安装PHP Pear包,具有幂等性

    我正在使用Ansible安装PHP的Pear包,如下所示:ignore_errors是必需的,因为pear在运行之前已成功运行/完成的命令时总是报告错误(例如:是否有更好(更幂等)的方式来运行pear命令,而不必滚动一堆大的,红色忽略的错误?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部