def linear_sRGB(c):
ย  ย  if c <= 0.04045:
ย  ย  ย  ย  return c / 12.92
ย  ย  else:
ย  ย  ย  ย  return pow((c + 0.055) / 1.055, 2.4)

def sRGB_to_XYZn(r, g, b):
ย  ย  Rlin = linear_sRGB(r / 255.0)
ย  ย  Glin = linear_sRGB(g / 255.0)
ย  ย  Blin = linear_sRGB(b / 255.0)
ย  ย  Xn = Rlin * 0.4124 + Glin * 0.3576 + Blin * 0.1805
ย  ย  Yn = Rlin * 0.2126 + Glin * 0.7152 + Blin * 0.0722
ย  ย  Zn = Rlin * 0.0193 + Glin * 0.1192 + Blin * 0.9505
ย  ย  return Xn, Yn, Zn

def gamma_sRGB(c):
ย  ย  if c <= 0.0031308:
ย  ย  ย  ย  return 12.92 * c
ย  ย  else:
ย  ย  ย  ย  return 1.055 * pow(c, 1/2.4) - 0.055

def XYZn_to_sRGB(Xn, Yn, Zn):
ย  ย  Rlin = Xn * 3.2406255 + Yn *-1.5372080 + Zn *-0.4986286
ย  ย  Glin = Xn *-0.9689307 + Yn * 1.8757561 + Zn * 0.0415175
ย  ย  Blin = Xn * 0.0557101 + Yn *-0.2040211 + Zn * 1.0569959
ย  ย  R = round(255 * gamma_sRGB(Rlin))
ย  ย  G = round(255 * gamma_sRGB(Glin))
ย  ย  B = round(255 * gamma_sRGB(Blin))
ย  ย  return R, G, B

def linear_AdobeRGB(c):
ย  ย  if c <= 0.0:
ย  ย  ย  ย  return 0.0
ย  ย  return pow(c, 2.19921875)

def AdobeRGB_to_XYZn(R, G, B):
ย  ย  Rlin = linear_AdobeRGB(R / 255.0)
ย  ย  Glin = linear_AdobeRGB(G / 255.0)
ย  ย  Blin = linear_AdobeRGB(B / 255.0)
ย  ย  Xn = Rlin * 0.57667 + Glin * 0.18556 + Blin * 0.18823
ย  ย  Yn = Rlin * 0.29734 + Glin * 0.62736 + Blin * 0.07529
ย  ย  Zn = Rlin * 0.02703 + Glin * 0.07069 + Blin * 0.99134
ย  ย  return Xn, Yn, Zn

def gamma_AdobeRGB(c):
ย  ย  if c <= 0.0:
ย  ย  ย  ย  return 0.0
ย  ย  return pow(c, 1/2.19921875)

def XYZn_to_AdobeRGB(Xn, Yn, Zn):
ย  ย  Rlin = Xn * 2.04159 + Yn *-0.56501 + Zn *-0.34473
ย  ย  Glin = Xn *-0.96924 + Yn * 1.87597 + Zn * 0.04156
ย  ย  Blin = Xn * 0.01344 + Yn *-0.11836 + Zn * 1.01517
ย  ย  R = round(255 * gamma_AdobeRGB(Rlin))
ย  ย  G = round(255 * gamma_AdobeRGB(Glin))
ย  ย  B = round(255 * gamma_AdobeRGB(Blin))
ย  ย  return R, G, B


๊ฒ€์ƒ‰ํ•ด์„œ ๊ธ์–ด์˜ด

sRGB -> Linear_sRGB -> XYZN(์ •๊ทœํ™”๊ณต๊ฐ„) -> Linear_Adobe RGB -> Adobe_RGB ๋กœ ๋ฐ”๊พธ๋Š”๊ฑฐ๊ฐ™์€๋ฐ

๊ทธ๋Ÿผ ์ด๊ฑฐ ๊ทธ๋Œ€๋กœ ๋ณต๋ถ™ํ•ด์„œ ์ปค์Šคํ…€ ์‰์ด๋”์— ๊ฐ™๋‹ค์“ฐ๋ฉด ํฌํ† ์ƒต Adobe RGB์ฒ˜๋Ÿผ ์“ธ์ˆ˜ ์žˆ๋Š”๊ฑด๊ฐ€


๊ทผ๋ฐ ๋น„ํŠธ๋Š” RGBA ๊ฐ๊ฐ 8๋น„ํŠธ๋กœ ํ•œ์ •๋˜์žˆ์„ํ…๋ฐ ์ด๋Ÿฐ ๋ณ€ํ™˜ํ•จ์ˆ˜๋งŒ์œผ๋กœ ์ƒ‰๊ณต๊ฐ„์ด ๋Š˜์–ด๋‚œ๋‹ค๋Š”๊ฒŒ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋„น