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
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ą:
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
Przykład
RGB (200, 80, 40), #c85028:
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:
- zawsze zastępują czernią całą wspólną szarość (100% GCR), a w druku zwykle zastępuje się tylko część,
- nie pilnują limitu pokrycia farbą: czerń (0, 0, 0) wychodzi jako K = 100%, a "bogata czerń" z drukarni ma np. C 60, M 40, Y 40, K 100,
- nie uwzględniają gamy: wynik zawsze "mieści się" w CMYK, choć drukarka może nie odtworzyć tej barwy.
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.