我尝试使用以下公式将 CMYK 转换为 RGB:
R = 255 × (1-C) × (1-K)
G = 255 × (1-M) × (1-K)
B = 255 × (1-Y) × (1-K)
将
CMYK(0, 100, 100, 80)
转换为 RGB,得到结果 RGB(51, 0, 0)
。
当我使用PDF-lib绘制一个带有
CMYK(0, 1.0, 1.0, 0.8)
颜色的矩形,然后生成pdf时。我发现 RGB 颜色是RGB(59, 8, 3)
,视觉效果比RGB(51, 0, 0)
更好。
问题:
我正在寻找将
cmyk(0, 100, 100, 80)
转换为 rgb(59, 8, 3)
的公式。 我也尝试了很多颜色系统,RGB(59,8,3)更适合打印。
我不知道将 CMYK(0, 100, 100, 80) 转换为 RGB(59, 8, 3)。
你能给我建议吗?
async generatePDF() {
// pdf-lib
const pdfDoc = await PDFDocument.create();
const page = pdfDoc.addPage([600, 400]);
const { width, height } = page.getSize();
// draw a rectangle
page.drawRectangle({
x: 50,
y: height - 150,
width: 200,
height: 100,
borderColor: rgb(0, 0, 0),
borderWidth: 2,
color: cmyk(0.0, 1.0, 1.0, 0.8),
});
...
...
}
“我尝试使用pdf-lib用CMYK(0,1.0,1.0,0.8)颜色绘制矩形并生成pdf。
我发现RGB颜色是RGB()并且比RGB(59, 8, 3
)更好。51, 0, 0
我需要以下想法:如何将 CMYK(0, 100, 100, 80) 转换为 RGB(59, 8, 3)。”
您必须在打印时创建自己的秘密配方,以获得“更好的 RGB 颜色”。
我从快速研究中得到的一些线索是,YCbCr 或 Rec.609 系数可能与 PDF 色调有关。我用您输入的 CMYK 尝试了 Rec.601 和 Rec.709 数字:
CMYK: 0, 100, 100, 80
--> Rec.601(每个系数除以 10):给出 R: 59, G: 8, B: 3
CMYK: 0, 100, 100, 80
--> Rec.709(每个系数除以 10):给出 R: 57, G: 10, B: 2
下面的实验算法代码是在问题中提供的一个 CMYK 值上进行测试的。
最好的情况下,它会匹配您所有其他预期的颜色,或者最坏的情况下,它只会在打印时提供比原始 CMYK 转换器更令人愉悦的红色(它提供了
RGB(51, 0, 0)
)
let r = 0; let g = 0; let b = 0;
//# input CMYK testing values ... range: 0.0 --> 1.0
let c = 0.0;
let m = 1.0;
let y = 1.0;
let k = 0.8;
c = c * (1 - k) + k; m = m * (1 - k) + k; y = y * (1 - k) + k;
//## Convert into RGB values
//# Try Ver 1: using Rec.601 coefficients divided by 10
r = (1 + 0.0299) - c;
g = (1 + 0.0587 - m) / 2;
b = (1 + 0.0114) - y;
/*
//# Try Ver 2: using Rec.709 coefficients divided by 10
r = 1 + (0.02126) - c;
g = (1 + 0.07152 - m) / 2;
b = 1 + (0.00722) - y;
*/
//# Final quantization ...
r = Math.ceil(255 * r); g = Math.ceil(255 * g); b = Math.ceil(255 * b);
//# Check output ...
console.log( "CMYK -> RGB (using Rec.601) : " );
console.log( "R: " + r + ", G: " + g + ", B: " + b );