What RGB values does a CMYK color give on screen?
Each RGB channel is 255 times the light left over after one ink and the black ink have absorbed their share. Cyan controls red, magenta controls green, yellow controls blue, and black dims all three. A deep red specified as 15, 100, 90, 10 comes out as rgb(195, 0, 23). It's an idealized screen preview of the print color, not a measured match.
Per-channel math
Writing each ink as a fraction (82% is 0.82), the converter computes:
| Channel | Formula | Driven by |
|---|---|---|
| Red | 255 × (1 − C) × (1 − K) | Cyan absorbs red light |
| Green | 255 × (1 − M) × (1 − K) | Magenta absorbs green |
| Blue | 255 × (1 − Y) × (1 − K) | Yellow absorbs blue |
Results are rounded to whole numbers and clamped to 0–255, then printed as rgb(R, G, B). This is the same calculation the W3C gives as the "naive" uncalibrated conversion in the CSS Color Module Level 5 draft, written there as 1 − min(1, C × (1 − K) + K), which simplifies to the formulas above.
For 15, 100, 90, 10: red = 255 × 0.85 × 0.90 = 195.1, green = 255 × 0 × 0.90 = 0, blue = 255 × 0.10 × 0.90 = 23.0. Rounded, rgb(195, 0, 23).
Where this preview helps
RGB is what screens, browsers, canvas APIs and most image libraries speak. Typical reasons to convert a print color:
- Mocking up the web or social version of a printed flyer, so the colors are at least in the right family.
- Building a quick swatch sheet from a list of CMYK specs to spot obvious typos (a "red" that comes out green has a swapped value).
- Feeding colors into code that only takes RGB, such as a chart library or an image script.
- Giving a developer something concrete when the only reference is a print PDF.
For the first two, convert each spec here, paste the rgb() into a test page or the color picker to eyeball it, and keep a note of which values were computed rather than official.
Why the preview isn't the print
The formula treats each ink as a perfect filter that blocks exactly one primary of light and nothing else, and paper as perfectly white. Real inks are impure and overlap, paper has a tint and texture, and every press and stock combination behaves differently. The CSS Color 5 draft says the naive approximation "is likely to be visually very far from the actual printed result." Pure cyan shows the gap well: 100, 0, 0, 0 becomes rgb(0, 255, 255), much brighter than cyan ink.
Color-managed tools avoid this by converting through an ICC profile, a description of a specific output condition maintained under the International Color Consortium format. Printers often work to a standard condition such as the one in the FOGRA39 data set for coated offset paper. If you need a preview you can sign off on, use a profile-aware app with your printer's profile, or ask for a hard proof.
Reference values
| CMYK | RGB |
|---|---|
| 100, 0, 0, 0 (cyan) | rgb(0, 255, 255) |
| 0, 0, 100, 0 (yellow) | rgb(255, 255, 0) |
| 0, 60, 100, 0 (orange) | rgb(255, 102, 0) |
| 82, 44, 0, 0 (blue) | rgb(46, 143, 255) |
| 0, 0, 0, 50 (50% black) | rgb(128, 128, 128) |
| 75, 68, 67, 90 (rich black) | rgb(6, 8, 8) |
| 0, 0, 0, 100 (black) | rgb(0, 0, 0) |
Common input problems
The parser takes the first four numbers it finds, so cmyk(82, 44, 0, 0), 82 44 0 0, 82-44-0-0, percent signs and labels like C 82 M 44 Y 0 K 0 all work.
| What you typed | Result | Fix |
|---|---|---|
0.82, 0.44, 0, 0 |
Error: "These look like 0-1 fractions…" | Use percentages: 82, 44, 0, 0 |
82, 44, 0 |
Error | Include K, even when it's 0 |
82, 44, 0, 120 |
Error | Every value must be 0 to 100 |
-5, 0, 0, 0 |
Error | A minus sign at the start of a number makes it negative |
For range and count problems the error text is "Enter valid CMYK percentages (0-100), e.g. cmyk(82, 44, 0, 0) or 82, 44, 0, 0." The fraction hint appears only when there are no % signs, all four values are between 0 and 1, and at least one is written with a decimal point. If you really mean values under 1%, add the percent signs: 0.82%, 0.44%, 0%, 0% gives rgb(253, 254, 255).
Next steps
To go back from screen to ink, use RGB to CMYK. If you'd like the result as a HEX code, RGB to HEX takes the rgb() output directly. To adjust brightness or saturation of a print color before converting, CMYK to HSV gives you values that match the sliders in most design apps.
Last updated