Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors 为什么我能';将图像导出到jpg时,无法获得完全相同的颜色_Colors_Export_Jpeg_Photoshop - Fatal编程技术网

Colors 为什么我能';将图像导出到jpg时,无法获得完全相同的颜色

Colors 为什么我能';将图像导出到jpg时,无法获得完全相同的颜色,colors,export,jpeg,photoshop,Colors,Export,Jpeg,Photoshop,我有一个Illustrator、一个PNG图像和一个SVG文件,其中一个框中填充了#041C2C颜色(深蓝色)。 当我试图将这些文件中的任何一个导出到jpg时,图像结果会稍微更改红色值,并将颜色更改为#051c2c 我使用Illustrator、Photoshop、Sketch和InVision Studio进行不同的导出设置。我也尝试过,但下载的图片在我打开时总是显示错误的颜色。 在Photoshop中,我使用颜色配置文件,但没有任何效果 你们中有谁能复制我所做的,但获得正确的颜色吗? 有没有

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

我使用Illustrator、Photoshop、Sketch和InVision Studio进行不同的导出设置。我也尝试过,但下载的图片在我打开时总是显示错误的颜色。 在Photoshop中,我使用颜色配置文件,但没有任何效果

你们中有谁能复制我所做的,但获得正确的颜色吗?


有没有获得原始颜色的方法?您面临几个问题。一个是PNG中使用的RBG颜色空间和JPEG中使用的YCbCr颜色空间没有相同的色域。如果将RBG颜色空间表示为一个图形,则会得到一个可以表示的颜色立方体。如果覆盖YCbCr颜色空间,则会得到另一个顶点位于(0,0,0)的立方体,但立方体会旋转

进行RBG到YCbCr转换时,YCbCr框外的值将被钳制以适合框内

另一个是JPEG过程使用浮点运算,从而产生舍入


另一个是量化。您可以通过使用量化表中的所有1来避免这种情况(并获得较差的压缩)。

这种颜色不能以JPEG格式存储

对于
#041c2c
颜色,相应的(R、G、B)值为(4、28、44)。 对于
#051c2c
颜色,相应的(R、G、B)值为(5、28、44)

根据,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
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
所以(Y,Cb,Cr)三重态是(23140115)

从YCbCr颜色计算满刻度8位每色通道RGB值的反向关系 (每个组件有256个级别)可按如下方式计算:

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
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)。

是的,我得到了相同的颜色值偏移-这是正常的,因为JPEG使用“有损”压缩。由于保存为JPEG时图像经过了许多步骤,因此这种颜色偏移是不可避免的。这些步骤包括:;颜色空间转换、色度下采样、编码/压缩。这就更详细地解释了这个过程。@RobC这是一种新的丢失形式,我以前从未听说过JPEG,正如一个答案所给出的那样。我不会称之为“正常”。这是一个关于JPEG的迷人事实,我从来不知道。我只是通过在Paint.net中用(4,28,44)填充一个大块并以最高质量保存为JPEG来验证它,然后它返回(5,28,44),正如您所说的。这里的问题是浮点算法。这里有两个问题来源。首先,在RGB=>YCbCr和YCbCr=>RGB转换中,这些值都会四舍五入。第二个问题是变换的JFIF表示中的舍入。这些转换是线性转换,可以用矩阵表示。JPEG版本四舍五入到三个小数点,因此,如果您用浮点表示值,它可以很容易地关闭大约半个像素值。