如果我们用pdftex
evince 3.18.2-1(和其他查看器)编译并打开它,颜色是紫色,而不是蓝色的:
\pdfliteral{1 1 0 0 k}
\vrule height 5cm width 5cm
\bye
请有人分享您的经验,如何在 pdftex 中使用颜色以及使用哪个查看器在屏幕上正确显示它们(在 Linux 上)。
我阅读了很多论坛,但我不明白为什么 CMYK 颜色在屏幕上显示不正确。我发现了这个错误报告: https://bugs.freedesktop.org/show_bug.cgi?id=14526 这和这里有关吗?这是 poppler 库中的错误吗?
如果能对这一混乱局面做出一些解释,我们将非常感激。
笔记如果我们使用灰色颜色空间,颜色会正确显示。但是假设我们想使用 CMYK。我们如何在纯文本中正确执行此操作?
更新
有一个非常有启发性的信息:
问题在于基于不同可视化物理原理的不同色彩空间。在面向印刷的色彩空间 (CMYK) 中,例如,“0 0 0 1 k”表示:使用零青色、零洋红色、零黄色但全黑色墨水。
Gay 颜色空间源自 RGB(但更简单),它基于光强度。“0 g”表示:在显示器上使用零光。“1 g”表示:使用全光,但这是什么意思呢?什么是白色?当人们看着一张白纸并感觉到反射光时的光强度是多少?但是在这个实验中光源有多强?现在是黄昏还是阳光直射?纸张反射多少光?它是好纸还是再生纸?当我们说“0 0 0 0 k”时,所有这些光照条件都不能包括在计算中,这意味着“像用过的纸一样白”。在这种情况下,使用显示器的可视化器会选择什么光强度?绝对不可能知道这一点。因此,“印刷”颜色空间无法转换为“光”颜色空间。但是当我们需要进行颜色空间转换时,我们需要做一些估算。
这些估计被纳入 ICC 配置文件。 evince 使用的 ICC 配置文件可能假设全黑墨水会将一小部分光线反射回用户眼睛。 但这只是一个估计因为ICC配置文件无法知道所用墨水的质量(以及所用纸张的质量)。也许这代表了印刷技术(使用CMYK)无法打印出绝对的黑色,因为黑色墨水不可能是绝对的黑色(?)。
从物理原理上来说,这种估计是不正确的,所以最好的解决方案就是简单地用“无光”来表示“0 0 0 1 k”。但 evince 的开发人员有不同的看法。Evince 开发人员决定,CMYK 颜色空间中的黑色必须与灰色和 RGB 空间中的黑色以不同的方式表示。
因此,问题变成了:如何改变ICC 配置文件证明吗?
回答
如果在 CMYK 中您需要使至少黑色在显示器上看起来确实是黑色(因为灰色文本有点难以阅读),请使用以下 poppler pdf 渲染库补丁:
--- poppler-0.44.0.orig/poppler/GfxState.cc
+++ poppler-0.44.0/poppler/GfxState.cc
@@ -1453,6 +1453,11 @@
rgb->r = clip01(dblToCol(r));
rgb->g = clip01(dblToCol(g));
rgb->b = clip01(dblToCol(b));
+ if ((color->c[0] == 0) && (color->c[1] == 0) && (color->c[2] == 0) && (color->c[3] == 65536)) {
+ rgb->r = 0;
+ rgb->g = 0;
+ rgb->b = 0;
+ }
}
static inline void GfxDeviceCMYKColorSpacegetRGBLineHelper(Guchar *&in, double &r, double &g, double &b)
我发布了错误报告这里。