PSD.js 字体颜色代码毫无意义

PSD.js Font Colour Codes Make No Sense

我知道这个问题已经被问过 但没有任何有意义的答案,开发人员很难找到。

使用 PSD.js 文本字符的颜色与 RGB、RGBA 或 CMYK 不匹配,a 颜色数组中有 5 个数字,它们甚至与 Photoshop 文件中的文本颜色不匹配,如果您尝试将任何数字与 RBG 或 CMYK 值进行比较。

PSD.js 显示文本特定部分颜色的示例显示了这个数组:

[3] => Array
(
    [0] => 27
    [1] => 185
    [2] => 116
    [3] => 0
    [4] => 255
)

你可以清楚地看到这些与我之前看到的任何颜色代码都没有关系。这些数字应该代表这种颜色:#db6971 - 但是 none 的数字匹配任何东西,RGB 是 219,105,113,CMYK 是 11%,72%,46%,0%

那么有人知道这里发生了什么吗?我正在尝试将此文本呈现为 html,但我无法在不知道这些数字的含义的情况下设置颜色。

如 PSD.js 回购官方 GitHub 页面上的 post 所述 - https://github.com/meltingice/psd.js/issues/119#issuecomment-346899211

...要转换数组,您可以这样做。

const colorArray = [ [ 102, 0, 255, 0, 255 ], [ 102, 0, 255, 0, 255 ]]
const RGB = colorArray.map(([r,g,b]) => [r,g,b]) //[[102,0,255],[102,0,255]] 

如果您将 CMYK 百分比乘以 255(一个字节的最大值),您将非常接近您在数组中看到的值 (28, 184, 117, 0)。最后一个值可能是 alpha(透明度)分量,255 表示全部不透明。所以,我会说这是 CMYK+A

给定你的数组:

[3] => Array
(
    [0] => 27
    [1] => 185
    [2] => 116
    [3] => 0
    [4] => 255
)

如果您需要以百分比表示的 CMYK 值,这只是您需要求解的方程式。

即。对于以百分比表示的 C 值,它是

255 * C / 100 = 27

这给你

C = 27 * 100 / 255 = 10.58 (~= 11%)
M = 185 * 100 / 255 = 72.54 (~= 73%)

等等

Y ~= 45%, K = 0%, A = 100%

这与您预期的 CMYK(11%、72%、46%、0%)非常接近。

现在,如果您想要 RGB 中的值,CMYK 到 RGB 的转换最好使用 ICC 配置文件(从一个特定的输入 CMYK 输入配置文件到特定的 RGB 输出,如 sRGB)。

您也可以使用您在网上找到的 simplified algorithms 之一。它会起作用,只是不要指望它看起来像 Photoshop 完成的转换。