xcolor 错误地转换为 cmyk 颜色模型

xcolor 错误地转换为 cmyk 颜色模型

这是一个 MWE:

\documentclass{article}
\usepackage{xcolor}

\begin{document}
    \definecolor{mycolor}{HTML}{4CAF50}

    \extractcolorspecs{mycolor}{\tmpmodel}{\tmpcolorspec}

    My color model: \tmpmodel

    My color spec: \tmpcolorspec

    \convertcolorspec{\tmpmodel}{\tmpcolorspec}{cmyk}{\cmykcolorspec}

    My color in cmyk: \cmykcolorspec

    \convertcolorspec{\tmpmodel}{\tmpcolorspec}{HTML}{\htmlcolorspec}

    My color in HTML: \htmlcolorspec\\

    \colorbox{mycolor}{\parbox[b][5em]{4em}{\tiny mycolor}}
    % Change color model
    \selectcolormodel{cmyk}
    \colorbox{mycolor}{\parbox[b][5em]{4em}{\tiny mycolor cmyk}}
    \definecolor{mynewcolor}{cmyk}{0.38821,0,0.37251,0.31374}
    \colorbox{mynewcolor}{\parbox[b][5em]{4em}{\tiny mynewcolor}}
    \definecolor{mylastcolor}{cmyk}{0.5656,0,0.5429,0.3137}
    \colorbox{mylastcolor}{\parbox[b][5em]{4em}{\tiny mylastcolor}}
\end{document}

结果如下:

在此处输入图片描述

请注意,mycolor使用 HTML 模型定义:4CAF50。xcolor 默认选择的颜色模型是RGB 色彩,正如我们从提取的模型中看到的那样。此颜色规范RGB 色彩模型是0.29805,0.68626,0.31374,这确实与我们使用一些在线颜色转换器得到的结果相同(https://www.colorhexa.com/4caf50)。 cmyk 转换后的颜色规范是0.38821,0,0.37251,0.31374,这与几乎任何在线执行的转换完全不同,例如,这是地点结果为0.5656,0,0.5429,0.3137。最后,正如您所看到的,HTML规范与原始值相对应,因此我们可以认为rgb到HTML的转换正确执行,而rgb到cmyk的转换没有执行。

我们在这里使用两个完全不同的颜色空间,颜色在不同空间看起来不同是可以理解的,在 Adob​​e Photoshop 等应用程序中也可以看到同样的想法。这里的问题是当我们从 rgb 转到 cmyk 时,颜色转换中出现了明显的错误。

为什么会发生这种情况?我该如何纠正?我是否遗漏了某些参数?

答案1

我通过以下计算步骤获取您的 cmyk 值:

  c= 1-r = 0.70195
  m= 1-g = 0.31374
  y= 1-b = 0.68626

  k = min(c,m,y) = 0.31374

  c = c-k = 0.38821
  m = m-k = 0
  y = y-k = 0.37252

这种相当简单的转换方法在 postscript 手册中有描述(https://www.adobe.com/content/dam/acom/en/devnet/actionscript/articles/psrefman.pdf,第 305 页及后续页面)。这当然是计算转换的一种可能性。

但如果你想彻底搞清楚“正确”的转换公式,你可以阅读这个帖子https://forums.adobe.com/thread/428899

答案2

不是真正的答案。只是一个代码,以便更好地直观地展示差异。正如您在下面看到的,转换之间是一致的。关于 cmyk 中的转换,正如 jfbu 在他/她的评论,由于设备依赖性,并不存在唯一一种转换算法。

例子

\documentclass[border=10pt]{standalone}
\usepackage{xcolor}
\begin{document}
\sffamily
\begin{testcolors}[rgb,cmyk,hsb,HTML]
\testcolor[HTML]{4CAF50}
\testcolor[rgb]{0.29805,0.68626,0.31374}
\testcolor[cmyk]{0.38821,0,0.37251,0.31374}
\testcolor[cmyk]{0.5656,0,0.5429,0.3137}
\end{testcolors}
\end{document}

相关内容