是否有可能将JPG制造的BMP重新编码回JPG而不会降低质量?

时间:2013-06-18 15:01:38

标签: bitmap jpeg bmp image-compression

有时我会将JPG图像保存为未压缩的位图(BMP / PNG),以便在我对图像进行更改时保持质量。

我想知道,理论上可以将位图重新编码回其原始JPG格式,而不会丢失任何质量(除了我编辑的区域)吗?

编辑:我在想某种方式来强制它找到该BMP数据块的原始JPG信息设置,从而生成JPG而不是BMP(以前是JPG)与原始JPG的区别。我不太了解JPG格式,如果它甚至可能,但我想不出为什么不,至少在一些有限时间你可以暴力8x8块?

4 个答案:

答案 0 :(得分:4)

JPEG压缩是有损的,因此当您将其重新编码为JPEG时,会丢失.bmp中的某些信息。如果图像是微不足道的(例如1个黑色pixel1黑色全黑,例如1个像素),您可以重新编码而不会丢失。

您可以看到多次重新编码JPEG的示例here

您可以对来自wikipedia

的无损JPEG进行一些操作
  

可以无损地执行对JPEG图像的许多改变   (即,没有再压缩和相关的质量损失)   只要图像大小是1个MCU块的倍数(最小编码   单位)(两个方向通常为16像素,4:2:0色度   二次抽样)。实现此功能的实用程序包括jpegtran   用户界面Jpegcrop,以及IrfanView的JPG_TRANSFORM插件。

     

块可以以90度的增量旋转,在中翻转   水平,垂直和对角轴,并在图像中移动。   并非原始图像中的所有块都需要在修改后使用   之一。

     

JPEG图像的上边缘和左边缘必须位于8×8像素块上   边界,但是底部和右边缘不需要这样做。这限制了   可能的无损作物操作,也防止翻转和   图像的旋转,其底部或右边缘不位于a   阻止所有通道的边界(因为边缘最终会在顶部   或者离开,如前所述 - 块边界是强制性的。)

     

使用无损裁剪时,如果是作物的底部或右侧   区域不在块边界上,然后是来自的其余数据   部分使用的块仍将出现在裁剪文件中   可以恢复。

     

也可以在基线和渐进之间进行转换   格式没有任何质量损失,因为唯一的区别是   系数放在文件中的顺序。

     

此外,几个JPEG图像可以无损地连接在一起,如   只要边缘与块边界重合。

答案 1 :(得分:2)

根据sbridges的详细答案和问题的具体部分,我会说

(我想知道,理论上可以将位图重新编码回其原始JPG格式,而不会丢失任何质量,(除了我编辑的区域)?)

我认为这里的主要问题是你必须更直接地编辑JPEG。编辑块时丢失数据。因此,您可以将其更改为BMP进行编辑,但随后您需要跟踪(或稍后比较和识别)您更改的像素。然后,您需要编辑JPEG中的特定块,并保持所有未编辑的块不变。这样,所有未编辑的块都没有质量损失,但是您更改的块将遭受解码/更改/重新编码质量损失。

由于实际执行此操作的复杂性, 可能,但可能不值得工作量。

答案 2 :(得分:2)

理论上可以将已知来自JPEG格式的BMP图像无损编码回JPEG格式。也就是说,您可以进行以下转换:

JPEG A => BMP X -> JPEG B => BMP X

其中=>是解压缩操作,->是压缩操作。

请注意,这不是完全您所要求的。您要求上述 JPEG A == JPEG B。我怀疑(但不确定)每个JPEG表示都解码为一个独特的图像,所以我的猜测是不能保证这个。

可以进行无损编码的原因是对特定大小和深度的图像存在有限数量的JPEG表示。这个数字难以管理,但仍然是有限的。编码算法可以简单地解码这些表示中的每一个,直到找到与您的BMP图像完全匹配的那个,然后输出该表示。该算法完全不切实际,但表明问题是有限的。

可能存在一种实用的算法。例如,人们可以想象一种迭代方法,如:

  1. 选择初始压缩参数(颜色采样和量化)。
  2. 将BMP图像压缩为候选JPEG。
  3. 解压缩候选人JPEG。
  4. 将解压缩的图像与原始BMP进行比较。
    • 如果相同,则输出候选JPEG并终止。
    • 如果不同,请更新压缩参数并返回步骤2.
  5. 诀窍在于更新步骤 - 弄清楚图像差异如何引导您改善参数。

    您可以编写适用于绝大多数情况的代码。有basically only 3 color sampling choices我的猜测是没有 许多算法来生成量化矩阵。您可以全部实现它们,或者在Internet上扫描JPEG文件并记录唯一的压缩参数。那么你可能会主要对新写的压缩器的图像失败。

    值得注意的是,这些方法依赖于对=>操作使用相同的解压缩器,因为不同的解压缩器可能无法从一个JPEG文件中为位生成相同的图像位。

答案 3 :(得分:1)

基本上,我们在这里处理图像格式和压缩。首先,让我们关注允许您将JPEG图像转换为BMP的过程。 BMP由具有R.G.B值的像素图形成。因此,就视觉方面和边缘而言,您不应该观察到原始JPEG图像与BMP中此图片的转换之间的差异(解决分辨率问题)。

相反,正如其他贡献者所说的那样(http://en.wikipedia.org/wiki/JPEG),JPEG格式使用压缩矩阵(DCT)来改变图片的渐变。

在大多数情况下,我倾向于说它不会起作用,例外的简单图片(均匀背景颜色上的均匀形状)。它不适用于凸轮或视频图片。