如何褪色

2024-06-19

我想将像素的颜色淡化为白色,但显然保持相同的颜色。如果我有一个像素(200,120,40),将每个值加上 10 以使(210,130,50)使其颜色相同,只是颜色更浅,还是会完全改变颜色?例如,我知道(100,100,100)即将(110,110,110)是灰度褪色。我希望对 RGB 值进行同样的操作,并且我想以数字方式进行操作,如图所示。有一个等式可以做到这一点吗?


有很多方法可以做到这一点。您选择如何做取决于您看重速度和简单性还是感知一致性。如果您需要它真正均匀,您将需要使用颜色配置文件定义 RGB 颜色,并且需要配置文件的原色,以便您可以转换为 XYZ,然后转换为 LAB,您可以在其中操作 L 通道。

大多数时候您不需要这样做,您可以使用简单的 HSB 模型,就像 Photoshop 在信息调色板中所做的那样。

为此,您只需想象 3D 空间中 RGB 点和白点之间的一条线,然后沿着该线移动颜色。实际上,您只需为该线创建一个参数方程并移动参数即可。

import numpy as np

def lighter(color, percent):
    '''assumes color is rgb between (0, 0, 0) and (255, 255, 255)'''
    color = np.array(color)
    white = np.array([255, 255, 255])
    vector = white-color
    return color + vector * percent

百分比 0.0 将返回相同的颜色,1.0 将返回白色。两者之间的所有颜色都将是相同色调的较浅色调。这应该会为您提供与 Photoshop 的 HSB 实现一致的结果,但将取决于设备并且可能不完全一致。

如果你有RGB [200, 100, 50]并输入 0.50 的百分比,它应该返回RGB[ 227.5 177.5 152.5]Photoshop 将两者报告为 20° 的色调。

如果没有 numpy,做到这一点并不难,但是元素明智的操作很方便。

根据评论进行编辑:

我并不是建议你这样做,除非你知道你确实需要以艰难的方式去做。但如果您想转换为 LAB,则无需太多麻烦。最重要的是,您需要首先知道 RGB 数字所处的色彩空间,或者需要对其含义做出一些假设。由于 sRGB 在网络上相当标准,因此我在这里假设。

转换并不困难,但很容易出错。令人高兴的是,有一个非常好的色彩数学模块,并且有很好的文档:https://github.com/gtaylor/python-colormath https://github.com/gtaylor/python-colormath

使用它,您可以在 sRGB 和 LAB 之间进行转换,如下所示:

from colormath.color_objects import sRGBColor, LabColor
from colormath.color_conversions import convert_color

sRGB = sRGBColor(126, 126, 126, is_upscaled=True) # or between [0, 1] with out is_upscaled
lab =  convert_color(sRGB, LabColor)

实验室现在是带有亮度通道的颜色lab.lab_l您可以在黑色 (0) 和白色 (100) 之间上下移动。这在视觉上应该比 HSB 更加统一(但是,根据您的应用程序,可能不足以保证这项工作)。

你可以简单地改变lab_l然后转换回来:

lab.lab_l = 80
new_sRGB = convert_color(lab, color_objects.sRGBColor).get_upscaled_value_tuple()

new_sRGB is now [198, 198, 198]。 colormath 为您解决了光源和伽玛问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何褪色 的相关文章

随机推荐

  • 如何从 .bat 运行 .vbs

    创建了一个广泛的批处理脚本程序来处理一些自动文件管理和打印 我需要调用一个 vbs 文件来执行它的 sendkeys 操作 有没有办法在不冻结程序的情况下完成此任务 我试过了START WAIT my vbs并且脚本在进入 vbs 时冻结
  • Visual Studio 中的项目不可信?

    打开最近下载的项目时 Visual Studio 2013 会简短警告您仅打开来自可靠来源的项目 开设项目有哪些风险 项目在编译之前会对您的系统造成任何损害吗 可能会造成什么损害 在实际从 不可信 来源打开项目之前 您应该注意哪些指标 不是
  • 在 aurelia 中使用路由器时如何设置/读取查询字符串?

    使用 aurelia io 框架路由器时 读取和设置查询字符串的首选方法是什么 例如 在网址中 http www myapp com myroute1 s mystate 如何读取和设置 s mystateurl 的一部分 让 aureli
  • 在分配滚动侦听器之前更新滚动顶部会触发滚动事件

    我正在更新scrollTop在我开始监听滚动事件之前的元素 但是 即使添加了滚动事件 也会触发滚动事件after the scrollTop已更新 我注意到如果我把 onscroll分配在一个setTimeout 1 它工作得很好 另请注意
  • Python 和 C# 之间的 IPC

    我想在 Windows 中的 Python 和 C 应用程序之间传递数据 我希望通道是双向的 事实上 我想将一个包含我用 C SharpPcap 捕获的网络数据包数据的结构传递给 Python 应用程序 然后将修改后的数据包发送回 C 程序
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 为什么 Android 服务在测试时不是单例的?

    当运行大量测试套件时 我注意到我的一个 Android 服务不再是单例的 Android 服务应该是单例的 但是当使用 ServiceTestCase 时 我的引用计数超过 1 在 onCreate 中递增 在 onDestroy 中递减
  • Amazon SNS 仪表板中创建平台应用程序的选项在哪里?

    我在这个页面向 AWS 注册您的移动应用程序 https docs aws amazon com sns latest dg mobile push send register html第一个子主题的第 1 项 标题为 向 AWS 注册您的
  • 围绕二维坐标系中的特定点缩放

    Below is an image my coordinate system 我想做的是 我想开始围绕画布中的特定点进行缩放 缩放工作正常 但我的问题是我不知道如何计算缩放时移动画布的量 请注意 我我没有使用canvas scale 我只是
  • 可以使用表通配符创建 sql 查询吗?

    这可能是一个简单的问题 但我无法在网上找到解决方案 任何帮助将不胜感激 我正在尝试在 PHP 中创建一个 SQL 查询 并希望以某种方式将通配符应用于 TABLE 过滤器 可能是这样的 select from table 但是 到目前为止我
  • Raku mixin 如何与运算符重载配合使用?

    我可以使用一些帮助来确定是否可以通过重载数学运算符来与 mixin 一起使用does or but 以避免下面的歧义错误 该模块 unit module Physics Error role Error is export has Real
  • Microsoft.WebApplication.targets

    当我将服务器签入构建服务器 使用 TFS 时遇到问题 但由于某种原因 返回下一个错误 Exception Message MSBuild error 1 has ended this build You can find more spec
  • Bash 实例未嵌套在 Dockerfile `RUN` 中

    嵌套 bash 实例会递增 SLVL 环境变量 http tldp org LDP abs html internalvariables html http tldp org LDP abs html internalvariables h
  • 如何将 Firestore 文档数据转换为类

    在 Firestore 中 有一些文档包含 名称 大陆 等字段及其字符串值 我在主 UI 代码中使用 FutureBuilder 并调用getData 功能 这是我的代码 class DatabaseService final locati
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • Android Studio:无法终止 xxx 的现有进程

    The application is a system application and it will be started by other applications When I install the application from
  • 在有或没有 UNICODE 支持的情况下,如何在我的程序中使用 _stprintf?

    微软的 定义 stprintf as swprintf if UNICODE被定义 并且sprintf如果不 但这些函数采用不同的参数 在swprintf 第二个参数是缓冲区大小 但是sprintf没有这个 有人偷懒了吗 如果是这样 这就是
  • 如何编写 Hibernate HQL 查询来删除所有“孙子”元素?

    我有学校 里面有团体 里面有学生 我想删除特定学校的所有学生 在 SQL 中我可以编写以下查询 DELETE FROM students1 WHERE students1 group id IN SELECT id FROM group1
  • 如何褪色

    我想将像素的颜色淡化为白色 但显然保持相同的颜色 如果我有一个像素 200 120 40 将每个值加上 10 以使 210 130 50 使其颜色相同 只是颜色更浅 还是会完全改变颜色 例如 我知道 100 100 100 即将 110 1