打开损坏的 JPEG 文件(不同程度的损坏、中间丢失数据、丢失标头)并尝试恢复完整部分

打开损坏的 JPEG 文件(不同程度的损坏、中间丢失数据、丢失标头)并尝试恢复完整部分

我使用 ddrescue 拯救了大部分旧硬盘,然后使用 photorec 恢复了文件。有很多照片完全恢复,这很棒。但也有很多损坏的 JPEG 文件,它们要么是半可读的并且停在中间的某个位置,要么是标头损坏并且根本无法打开。

现在,我使用 GIMP 来打开它们,因为对于文件中间部分数据损坏的文件,GIMP 至少会显示图像,直到发生损坏为止。

有没有任何工具可以:

  • 可以打开文件的完整部分并将它们合并在一起(不会在损坏时停止,GIMP 中的错误“JPEG 文件过早结束”、“无效的 JPEG 文件结构:两个 SOI 标记”等)
  • 可以帮助找到正确的标头设置以恢复至少某些根本无法打开的损坏文件的部分

答案1

在没有标题的情况下重建图像的“尾部”是很困难的:

可悲的是,那就是一般来说由于图像压缩和 JPEG 的工作原理,这是不可能的。

首先,JPEG 在其最后阶段是霍夫曼编码的(通常,算术编码很少见,至少我是这么听说的)。这意味着您需要一个表(或二叉树的另一种编码)来告诉您压缩数据的符号与未压缩数据的含义。

在 JPEG 中,您可以使用 JPEG 标准提供的现成表格之一,也可以查看数据并构建一个更适合您正在编码的确切图像的表格。通常,相机和软件编码器执行后者。它足够便宜并且无损地节省空间。

但这意味着如果没有该表,您的数据看起来就像完全随机的位并且无法解码。

不过,幸运的是,您使用的相机仅对类似图像使用预先计算的“自定义”表(比使用非常通用的 JPEG 标准化表要好一些,但不需要重新计算每张图片的统计数据)。那么,回收霍夫曼表确实可行。

但问题确实在于,在了解该表之前,您无法解码。然后你就无法知道可读尾部有多少个8×8的图像数据块。但它是一个具有固定数量块的矩形图像。因此,如果您只是将另一个文件的开头放在损坏的开头位置,则取决于压缩的程度,您是否获得比应有的更多或更少的块!但这仍然给你留下了破碎的形象。

TL;DR:不,很难,即使你很幸运,也会经历很多尝试和错误。

相关内容