semmixkolor i percepcja

Przekształcenia RGB, CMY i CMYK

Najprostsze przekształcenia w teorii koloru: CMY to odwrotność RGB, a CMYK to CMY z czernią wydzieloną jako osobna składowa. Wzory są krótkie, ale warto wiedzieć, czego nie załatwiają.

Wszystkie wartości w zakresie 0..1. Wartości 0..255 dzielimy przez 255, procenty przez 100.

RGB i CMY

C = 1 - R R = 1 - C M = 1 - G G = 1 - M Y = 1 - B B = 1 - Y

CMY opisuje, ile światła każda farba ma pochłonąć (zob. modele CMY i CMYK). Biel to (0, 0, 0), czerń (1, 1, 1).

CMY i CMYK

Część wspólna trzech farb daje szarość, którą można zastąpić czernią:

K = min(C, M, Y) C' = (C - K) / (1 - K) M' = (M - K) / (1 - K) Y' = (Y - K) / (1 - K) (dla K = 1: C' = M' = Y' = 0) z powrotem: C = C' · (1 - K) + K M = M' · (1 - K) + K Y = Y' · (1 - K) + K

Dzielenie przez (1 - K) skaluje pozostałe farby do pełnego zakresu. Dzięki temu C', M', Y' mówią o barwie, a K o jej przyciemnieniu.

RGB i CMYK bezpośrednio

K = 1 - max(R, G, B) C = (1 - R - K) / (1 - K) M = (1 - G - K) / (1 - K) Y = (1 - B - K) / (1 - K) R = (1 - C) · (1 - K) G = (1 - M) · (1 - K) B = (1 - Y) · (1 - K)

Przykład

RGB (200, 80, 40), #c85028:

R = 0,7843 G = 0,3137 B = 0,1569 CMY: C = 0,2157 M = 0,6863 Y = 0,8431 CMYK: K = min(0,2157; 0,6863; 0,8431) = 0,2157 C' = (0,2157 - 0,2157) / 0,7843 = 0 M' = (0,6863 - 0,2157) / 0,7843 = 0,6 Y' = (0,8431 - 0,2157) / 0,7843 = 0,8 CMYK = (0%, 60%, 80%, 21,6%) z powrotem: R = (1 - 0) · 0,7843 = 0,7843 → 200 G = (1 - 0,6) · 0,7843 = 0,3137 → 80 B = (1 - 0,8) · 0,7843 = 0,1569 → 40

Kod

// r, g, b w zakresie 0..1
function rgbToCmyk(r, g, b) {
  const k = 1 - Math.max(r, g, b);
  if (k === 1) return { c: 0, m: 0, y: 0, k: 1 };
  return {
    c: (1 - r - k) / (1 - k),
    m: (1 - g - k) / (1 - k),
    y: (1 - b - k) / (1 - k),
    k,
  };
}

function cmykToRgb(c, m, y, k) {
  return { r: (1 - c) * (1 - k), g: (1 - m) * (1 - k), b: (1 - y) * (1 - k) };
}

Czego te wzory nie robią

To przekształcenia geometryczne między dwoma opisami tego samego sześcianu. Nie wiedzą nic o farbach, papierze ani maszynie drukarskiej, więc:

Do przygotowania plików do druku używa się profilu ICC procesu druku (zob. zarządzanie kolorem). Powyższe wzory nadają się do grafiki ekranowej, wizualizacji i do zrozumienia, jak działa model.