从 matplotlib 中的原始颜色"alpha blending"获取新的十六进制颜色值



简单地说,给定初始颜色"#1010CA"和 alpha 因子 0.5,我如何获得以color="#1010CA", alpha=0.5表示的图上显示的最终颜色?

或者更直接地说,我应该填写什么

plot(x, y, color=__)

因此它等效于(至少在视觉上(到

plot(x, y, color="#1010CA", alpha=0.5)

?我想这不应该是一个 python 问题,而是如何通过某种因素操纵 rgb 颜色来抑制它,但请原谅我对调色板的无知......

编辑

这是我在接受@Blender的答案后选择的当前解决方案

import matplotlib
import numpy as np
def alpha_blending(hex_color, alpha) :
    """ alpha blending as if on the white background.
    """
    foreground_tuple  = matplotlib.colors.hex2color(hex_color)
    foreground_arr = np.array(foreground_tuple)
    final = tuple( (1. -  alpha) + foreground_arr*alpha )
    return(final)

如果没有背景颜色,您也无法获得"最终颜色"。

但是对于渲染 alpha 透明度,我加权和会起作用:

final = (1 - alpha) * background + alpha * foreground

因此,如果您的颜色是白色并且alpha = 0.5,您可以执行以下操作:

final = rgb(0.5, 0.5, 0.5) + foreground / 2

Matplotlib 接受 RGB 元组,因此您可以非常轻松地制作不透明度展平化函数。然而,为什么你需要这样做,我无法回答。

问题是它是两种颜色(前景和背景(的混合,会影响最终的像素颜色。如果您从白色作为背景,将前景色转换为 HSI 色彩空间 (http://en.wikipedia.org/wiki/HSL_and_HSV( 并使用 I 作为 alpha 通道可以使您接近。为了获得更紧密的匹配,您可以使用 L*a*b 色彩空间 (http://en.wikipedia.org/wiki/CIELAB( 并更改 L 以匹配您的透明度。

最新更新