为什么在将图像导出为 jpg 时无法获得完全相同的颜色
Why I can't get the exact same color when exporting an image to jpg
我有一个 Illustrator、一个 PNG 图像和一个 SVG 文件,其中的框填充了 #041C2C
颜色(深蓝色)。
当我尝试将这些文件中的任何一个导出为 jpg 时,图像结果会稍微改变红色值并将颜色更改为 #051c2c
.
我使用的 Illustrator、Photoshop、Sketch 和 InVision Studio 具有不同的导出设置。我也试过 online jpg generator 但下载的图像在我打开时总是显示错误的颜色。
在 Photoshop 中,我尝试使用颜色配置文件,但没有任何好反应。
你们中的任何人都可以复制我所做的但获得正确的颜色吗?
有没有办法得到原来的颜色?
您面临几个问题。一是PNG中使用的RBG颜色space和JPEG中使用的YCbCr颜色space不具有相同的色域。如果您将 RBG 颜色 space 表示为图形,您将得到一个可以表示的颜色立方体。如果覆盖 YCbCr 颜色 space,您会得到另一个顶点位于 (0,0,0) 的立方体,但立方体已旋转。
当您进行 RBG 到 YCbCr 的转换时,YCbCr 框外的值会被限制以适合框内。
另一个是 JPEG 过程使用浮点运算,导致四舍五入。
另一个是量化。您可以通过在量化能力中使用全 1(并获得较差的压缩)来避免这种情况。
JPEG 格式无法存储这种颜色。
对于#041c2c
颜色,对应的(R,G,B)值为(4,28,44)。
对于#051c2c
颜色,对应的(R,G,B)值为(5,28,44).
根据JFIF standard,YCbCr 颜色(每个分量有 256 个级别)可以
直接从满量程 8 位每个颜色通道 RGB 颜色计算如下:
Y = Min(Max(0, Round( 0.299*R + 0.587*G + 0.114*B)), 255) = Min(Max(0, Round(22.648)), 255) = 23
Cb = Min(Max(0, Round((-0.299*R - 0.587*G + 0.886*B) / 1.772 + 128)), 255) = Min(Max(0, Round(140.0496614)), 255) = 140
Cr = Min(Max(0, Round(( 0.701*R - 0.587*G - 0.114*B) / 1.402 + 128)), 255) = Min(Max(0, Round(114.699001427)), 255) = 115
所以 (Y, Cb, Cr) 三元组是 (23, 140, 115)。
从 YCbCr 颜色计算满量程 8 位每个颜色通道 RGB 值的反比关系
(每个组件有 256 个级别)可以计算如下:
R = Min(Max(0, Round(Y + 1.402 * (Cr - 128))), 255) = Min(Max(0, Round(4.774)), 255) = 5
G = Min(Max(0, Round(Y - (0.114 * 1.772 * (Cb - 128) + 0.299 * 1.402 * (Cr - 128)) / 0.587)), 255) = Min(Max(0, Round(28.1541362862)), 255) = 28
B = Min(Max(0, Round(Y + 1.772 * (Cb - 128))), 255) = Min(Max(0, Round(44.264)), 255) = 44
如您所见,(R, G, B) 值为 (5, 28, 44)。
没有 YCbCr 值的组合导致输出上的 (4, 28, 44)。
我有一个 Illustrator、一个 PNG 图像和一个 SVG 文件,其中的框填充了 #041C2C
颜色(深蓝色)。
当我尝试将这些文件中的任何一个导出为 jpg 时,图像结果会稍微改变红色值并将颜色更改为 #051c2c
.
我使用的 Illustrator、Photoshop、Sketch 和 InVision Studio 具有不同的导出设置。我也试过 online jpg generator 但下载的图像在我打开时总是显示错误的颜色。 在 Photoshop 中,我尝试使用颜色配置文件,但没有任何好反应。
你们中的任何人都可以复制我所做的但获得正确的颜色吗?
有没有办法得到原来的颜色?
您面临几个问题。一是PNG中使用的RBG颜色space和JPEG中使用的YCbCr颜色space不具有相同的色域。如果您将 RBG 颜色 space 表示为图形,您将得到一个可以表示的颜色立方体。如果覆盖 YCbCr 颜色 space,您会得到另一个顶点位于 (0,0,0) 的立方体,但立方体已旋转。
当您进行 RBG 到 YCbCr 的转换时,YCbCr 框外的值会被限制以适合框内。
另一个是 JPEG 过程使用浮点运算,导致四舍五入。
另一个是量化。您可以通过在量化能力中使用全 1(并获得较差的压缩)来避免这种情况。
JPEG 格式无法存储这种颜色。
对于#041c2c
颜色,对应的(R,G,B)值为(4,28,44)。
对于#051c2c
颜色,对应的(R,G,B)值为(5,28,44).
根据JFIF standard,YCbCr 颜色(每个分量有 256 个级别)可以 直接从满量程 8 位每个颜色通道 RGB 颜色计算如下:
Y = Min(Max(0, Round( 0.299*R + 0.587*G + 0.114*B)), 255) = Min(Max(0, Round(22.648)), 255) = 23
Cb = Min(Max(0, Round((-0.299*R - 0.587*G + 0.886*B) / 1.772 + 128)), 255) = Min(Max(0, Round(140.0496614)), 255) = 140
Cr = Min(Max(0, Round(( 0.701*R - 0.587*G - 0.114*B) / 1.402 + 128)), 255) = Min(Max(0, Round(114.699001427)), 255) = 115
所以 (Y, Cb, Cr) 三元组是 (23, 140, 115)。
从 YCbCr 颜色计算满量程 8 位每个颜色通道 RGB 值的反比关系 (每个组件有 256 个级别)可以计算如下:
R = Min(Max(0, Round(Y + 1.402 * (Cr - 128))), 255) = Min(Max(0, Round(4.774)), 255) = 5
G = Min(Max(0, Round(Y - (0.114 * 1.772 * (Cb - 128) + 0.299 * 1.402 * (Cr - 128)) / 0.587)), 255) = Min(Max(0, Round(28.1541362862)), 255) = 28
B = Min(Max(0, Round(Y + 1.772 * (Cb - 128))), 255) = Min(Max(0, Round(44.264)), 255) = 44
如您所见,(R, G, B) 值为 (5, 28, 44)。
没有 YCbCr 值的组合导致输出上的 (4, 28, 44)。