为什么将图像导出为jpg时无法获得完全相同的颜色

时间:2019-03-07 13:03:53

标签: colors export jpeg photoshop

我有一个Illustrator,一个PNG图像和一个SVG文件,其中的框充满了#041C2C颜色(深蓝色)。 当我尝试将这些文件中的任何一个导出为jpg时,图像结果会稍微改变红色值并将颜色更改为#051c2c

我将Illustrator,Photoshop,Sketch和InVision Studio与不同的导出设置一起使用。我也尝试过online jpg generator,但是当我重新打开下载的图像时,它总是显示错误的颜色。 在Photoshop中,我使用颜色配置文件,但没有任何反应。

你们中的任何人都可以复制我所做的但获得正确颜色的吗?

是否有获取原始颜色的方法?

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

您面临几个问题。一种是PNG中使用的RBG颜色空间,而JPEG中使用的YCbCr颜色空间没有相同的色域。如果将RBG颜色空间表示为图形,则会得到可以表示的颜色立方体。如果覆盖YCbCr颜色空间,则会得到另一个顶点为(0,0,0)的多维数据集,但是该多维数据集已旋转。

当您执行从RBG到YCbCr的转换时,YCbCr框外的值将被钳位以适合框内。

另一个是JPEG进程使用浮点算法进行舍入。

另一个是量化。您可以通过在量化功能中使用全1来避免这一情况(并获得较差的压缩率)。