Colors 即使质量为100,libjpeg也没有精确的像素值

Colors 即使质量为100,libjpeg也没有精确的像素值,colors,jpeg,rgb,grayscale,libjpeg-turbo,Colors,Jpeg,Rgb,Grayscale,Libjpeg Turbo,我正在编写一个程序来读取一些文本文件,并使用将其写入JPEG文件。当我将质量设置为100(使用jpeg\u set\u quality)时,实际上灰度中没有质量下降。然而,当我转到RGB时,即使质量为100,也似乎存在压缩 当我将此输入转换为灰度JPEG图像时,它可以很好地工作,并为我提供一个干净的JPEG图像: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 (水平翻转)输出为: 现在,当我假设数组是红色,并分别使用以

我正在编写一个程序来读取一些文本文件,并使用将其写入JPEG文件。当我将质量设置为100(使用
jpeg\u set\u quality
)时,实际上灰度中没有质量下降。然而,当我转到RGB时,即使质量为100,也似乎存在压缩

当我将此输入转换为灰度JPEG图像时,它可以很好地工作,并为我提供一个干净的JPEG图像:

0  0  0 0 0
0  0  0 0 0
0  0  0 0 0
0 255 0 0 0
255 0 0 0 0
(水平翻转)输出为:

现在,当我假设数组是红色,并分别使用以下两个数组作为绿色和蓝色:

0 0  0  0 0
0 0  0  0 0
0 0 255 0 0
0 0  0  0 0
0 0  0  0 0


0 0 0  0 255
0 0 0 255 0
0 0 0  0  0
0 0 0  0  0
0 0 0  0  0
这是我得到的颜色输出:

虽然只有5个输入像素具有任何颜色值,但周围像素在转换为颜色时也会获得一个值。对于灰度图像和RGB图像,质量都设置为100


我想看看是什么原因导致了这种情况,以及我如何修复它,以便颜色也只用于实际具有输入值的像素?

修复很简单-只是不要使用jpeg。Png对于您的用例来说是一个更好的选择


您看到的是jpeg压缩工作原理的结果,有“无损jpeg”这样的东西,但它实际上是一种完全不同的文件格式,没有得到很好的支持。

您在RGB->YCbCr转换中遇到错误。这是不可能避免的,因为两个颜色空间之间没有1:1的映射。

除了RGB,我还需要CMYK,所以我不能使用PNG。我不明白为什么在灰度中没有压缩,但在颜色中有!?!