2012-05-18 5 views
2

의 원래 색상 인 "알파 블렌딩"에서 새로운 16 진수 색상 값을 얻으십시오. 초기 색상 "# 1010CA"및 알파 팩터 0.5가 주어진다면, 어떻게하면 플롯에 표시된 최종 색상을 얻을 수 있습니까? color="#1010CA", alpha=0.5?matplotlib

더욱 직설적

또는, I는

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

에 (적어도 시각) 당량이되도록

plot(x, y, color=__) 

무엇을 기입해야 하는가? 나는 여기에

현재입니다

편집 ... 그것을 젖은 몇 가지 요인에 의해 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) 
+0

방금 ​​색상을 두 번 어둡게 만들었습니다. '(0.5, 0.5, 0.5)'를 추가하십시오. – Blender

+0

@Blender 당신 말이 맞습니다. 나는 그 코드를 삭제했지만 "0.5 + foregroud/2"는 정확하거나 근사치입니까? – nye17

+0

롤 (Lol), 첫 번째 시도에서 실제로 추측했습니다 (http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending). 예, 흰색의 배경색과 0.5의 투명도에 대한 정확한 해결책입니다. 'numpy'를 사용하면'tuple (0.5 + numpy.array (foreground_tuple)/2.0)'을하고 다시 Matplotlib 색상 매개 변수에 연결할 수 있습니다. – Blender

답변

1

배경색도 없으면 "최종 색상"을 얻을 수 없습니다.

그러나 렌더링 알파 투명도에 대한

, 나는 은 가중 합이 일 것이라고 추측 것 :

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

그래서 당신의 색깔은 흰색과 alpha = 0.5, 당신이 할 수있는 경우 :

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

Matplotlib은 RGB 튜플을 허용하므로 불투명 병합 기능을 매우 쉽게 만들 수 있습니다. 그러나 당신이 이것을해야하는 이유는 내가 대답 할 수있는 것이 아닙니다.

+0

그래, 내가 맞다고 생각해, 아직 배경에 대해 생각하지 못했다. 단지이 순간에 흰색이 될거라 생각한다. ... – nye17

0

최종 픽셀 색상에 영향을 미치는 두 가지 색상 (전경 및 배경)이 혼합되어 있다는 점에서 문제가 있습니다. 배경색을 흰색으로 시작하는 경우 전경색을 HSI 색 공간 (http://en.wikipedia.org/wiki/HSL_and_HSV)으로 변경하고 을 알파 채널로 사용하면 가까운 색으로 볼 수 있습니다. 더욱 근접하게 일치 시키려면 L * a * b 색 공간 (http://en.wikipedia.org/wiki/CIELAB)을 사용하고 L을 투명도 비율과 일치하도록 변경하십시오.

+0

그래서이 색 공간 변환을 기반으로 한 파이썬에서 빠르고 더러운 솔루션이 있는가? 자료를 파싱하고 파이썬으로 완성하려면 20 분 이상이 필요합니다. – nye17