【问题标题】:How can I darken/lighten a RGB color如何使 RGB 颜色变暗/变亮
【发布时间】:2020-06-09 15:02:09
【问题描述】:

所以我正在尝试制作一个颜色渐变,从一种颜色到全黑,以及从一种颜色到全白。

假设我有(175, 250, 255),我想将该颜色变暗 10 次以在(0, 0, 0) 结束,我该怎么做? 我还想把颜色调亮,所以我想调亮10次,最后在(255, 255, 255)结束。

【问题讨论】:

    标签: python colors


    【解决方案1】:

    也许用户 Peter O 对同一问题的接受回答会有所帮助:Given an RGB value, how do I create a tint (or shade)?

    在着色和着色的几个选项中:

    对于阴影,将每个分量乘以它的 1/4、1/2、3/4 等 以前的值。系数越小,阴影越深。

    对于色调,计算(255 - 前一个值),乘以 1/4, 1/2、3/4 等(系数越大,色调越淡),并添加 到前一个值(假设 each.component 是 8 位 整数)。

    请注意,颜色处理(例如色调和其他阴影)应该 在线性RGB中完成。但是,文档中指定的 RGB 颜色或 在图像和视频中编码不太可能是线性 RGB,在 在这种情况下,需要应用所谓的逆传递函数 到每个 RGB 颜色的组件。此功能随 RGB 颜色空间。例如,在 sRGB 颜色空间中(可以是 假设如果 RGB 颜色空间未知),这个函数大致是 相当于提升每个 sRGB 颜色分量(范围从 0 通过 1) 的 2.2 次方。 (请注意,“线性 RGB”不是 RGB 色彩空间。)

    另请参阅 Violet Giraffe 关于“伽马校正”的评论。

    【讨论】:

    • 我发誓我找遍了,找不到任何像我要找的东西,这很有帮助,谢谢!
    • 我有,但遗憾的是我没有足够的声誉。
    【解决方案2】:

    解决这个问题的方法很多。一种想法是找出当前值与目标值之间的差异,然后除以 10。

    所以(175, 250, 255)(0, 0, 0) 的差是(175, 250, 255),然后将其除以十得到你要减去十步中的每一步的结果。所以每一步减去(-17.5, -25, -25.5),需要时四舍五入。

    【讨论】:

      【解决方案3】:

      你能把每个值减少 10% 十次吗? 例如,您的颜色将是:

      175 250 255
      157 225 229
      140 200 204
      122 175 178
      105 150 153
      87 125 127
      70 100 102
      52 75 76
      35 50 51
      17 25 25
      0 0 0
      

      【讨论】:

        【解决方案4】:

        可能是这样的:

        def interpolate(color_a, color_b, t):
            # 'color_a' and 'color_b' are RGB tuples
            # 't' is a value between 0.0 and 1.0
            # this is a naive interpolation
            return tuple(int(a + (b - a) * t) for a, b in zip(color_a, color_b))
        
        def main():
        
            color_a = (175, 250, 255)
            color_b = (0, 0, 0)
        
            number_of_steps = 10
        
            colors = [interpolate(color_a, color_b, t/number_of_steps) for t in range(number_of_steps+1)]
            for color in colors:
                print(color)
        
            return 0
        
        
        if __name__ == "__main__":
            import sys
            sys.exit(main())
        

        输出:

        (175, 250, 255)
        (157, 225, 229)
        (140, 200, 204)
        (122, 175, 178)
        (105, 150, 153)
        (87, 125, 127)
        (70, 100, 102)
        (52, 75, 76)
        (35, 50, 51)
        (17, 25, 25)
        (0, 0, 0)
        

        【讨论】:

        • 正是我想要的,谢谢!不过我现在觉得有点傻哈哈。
        • 不用担心。要记住的一件事 - 我发布的代码实际上产生 11 种颜色 (number_of_steps+1)。不确定“将颜色变暗 10 次”是否还应该包括开始和结束颜色(包括开始和结束颜色的 10 种,或者介于两者之间的 10 种阴影?)。不过,根据您的需要进行修改应该不难。
        • 对不起,我应该更清楚,我想要 11 包括主要颜色:)
        猜你喜欢
        • 2013-01-09
        • 2013-08-18
        • 2020-04-04
        • 2017-12-27
        • 2016-10-12
        • 2018-12-23
        • 1970-01-01
        相关资源
        最近更新 更多