这是一个 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的转换没有执行。
我们在这里使用两个完全不同的颜色空间,颜色在不同空间看起来不同是可以理解的,在 Adobe 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}