Skip to content

Instantly share code, notes, and snippets.

@crsaracco
Created December 16, 2014 06:01
Show Gist options
  • Save crsaracco/7b8a4eebcbf5a97bccbd to your computer and use it in GitHub Desktop.
Save crsaracco/7b8a4eebcbf5a97bccbd to your computer and use it in GitHub Desktop.
colors.py
def rgb2xyz(r, g, b):
var_r = r * 1.0 / 255
var_g = g * 1.0 / 255
var_b = b * 1.0 / 255
if var_r > 0.04045:
var_r = ((var_r + 0.055) / 1.055) ** 2.4
else:
var_r = var_r / 12.92
if var_g > 0.04045:
var_g = ((var_g + 0.055) / 1.055) ** 2.4
else:
var_g = var_g / 12.92
if var_b > 0.04045:
var_b = ((var_b + 0.055) / 1.055) ** 2.4
else:
var_b = var_b / 12.92
var_r = var_r * 100
var_g = var_g * 100
var_b = var_b * 100
x = var_r * 0.4124 + var_g * 0.3576 + var_b * 0.1805
y = var_r * 0.2126 + var_g * 0.7152 + var_b * 0.0722
z = var_r * 0.0193 + var_g * 0.1192 + var_b * 0.9505
return (x, y, z)
def xyz2rgb(x, y, z):
var_x = x * 1.0 / 100
var_y = y * 1.0 / 100
var_z = z * 1.0 / 100
var_r = var_x * 3.2406 + var_y * -1.5372 + var_z * -0.4986
var_g = var_x * -0.9689 + var_y * 1.8758 + var_z * 0.0415
var_b = var_x * 0.0557 + var_y * -0.2040 + var_z * 1.0570
if var_r > 0.0031308:
var_r = 1.055 * var_r ** (1.0/2.4) - 0.055
else:
var_r = 12.92 * var_r
if var_g > 0.0031308:
var_g = 1.055 * var_g ** (1.0/2.4) - 0.055
else:
var_g = 12.92 * var_g
if var_b > 0.0031308:
var_b = 1.055 * var_b ** (1.0/2.4) - 0.055
else:
var_b = 12.92 * var_b
r = int(var_r * 255)
g = int(var_r * 255)
b = int(var_r * 255)
return (r, g, b)
def xyz2cielab(x, y, z):
var_x = x * 1.0 / 95.047
var_y = y * 1.0 / 100.000
var_z = z * 1.0 / 108.883
if var_x > 0.008856:
var_x = var_x ** (1.0/3.0)
else:
var_x = var_x * 7.787 + 16.0 / 116.0
if var_y > 0.008856:
var_y = var_y ** (1.0/3.0)
else:
var_y = var_y * 7.787 + 16.0 / 116.0
if var_z > 0.008856:
var_z = var_z ** (1.0/3.0)
else:
var_z = var_z * 7.787 + 16.0 / 116.0
l = (116 * var_y) - 16
a = 500 * (var_x - var_y)
b = 200 * (var_y - var_z)
return (l, a, b)
def cielab2xyz(l, a, b):
var_y = (l + 16) * 1.0 / 116.0
var_x = a * 1.0 / 500.0 + var_y
var_z = var_y - b * 1.0 / 200.0
if var_y ** 3 > 0.008856:
var_y = var_y ** 3
else:
var_y = (var_y - 16.0 / 116.0) / 7.7877
if var_x ** 3 > 0.008856:
var_x = var_x ** 3
else:
var_x = (var_x - 16.0 / 116.0) / 7.7877
if var_z ** 3 > 0.008856:
var_z = var_z ** 3
else:
var_z = (var_z - 16.0 / 116.0) / 7.7877
x = 95.047 * var_x
y = 100.000 * var_y
z = 108.883 * var_z
return (x, y, z)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment