如何修复损坏的 JPEG 文件?

如何修复损坏的 JPEG 文件?

我有一些 JPEG 文件,在某个点之后,某些颜色会出错,而且每个像素都会向左移动。我认为这是因为在变化点处缺少一些字节。

我尝试用 编辑文件,vi但似乎无法找出丢失的字节在哪里,而且vi使用起来非常复杂。我也试过了,nano但它不是二进制安全的。

这是其中一张图片:

在此处输入图片描述

所以我想问你两个问题:

  1. 我怎样才能在 Linux 中修复此类图像?
  2. 如何在 Linux 下的二进制文本编辑器中安全地打开和编辑该文件?

编辑:使用hexedit我发现从位置0x27F0000x27F403只有 1 0xff,而从0x27F4040x27FFFF只有 0 0x00

这使得事情像这样:

0027EFF0   F8 83 C3 E2  09 35 AF 13  44 6E C5 FD  C7 EF 23 E8  .....5..Dn....#.
0027F000   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
[...]
0027F400   FF FF FF FF  00 00 00 00  00 00 00 00  00 00 00 00  ................
[...]
0027FFF0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00280000   8F 39 6E 47  4F 43 5F 36  7C 73 66 F1  0D AE AD AF  .9nGOC_6|sf.....

通过用随机数改变这些字节,我能够取消图像的移位,但仍然存在颜色问题。

有人可以给我提供一些有关 JPEG 编码的文档,以便我知道如何知道 8x8 块的结束位置吗?

我想知道为什么位置如此精确0x27F0000x27FFFF这可能是我的相机或我使用的存储卡的错误吗?

答案1

不幸的是,我不知道有任何 Linux 工具。这在 Windows 中有效:youtu.be/A33zn_sgm30

要做到这一点可能有点麻烦,但还是可行的。披露:我是这个软件的作者,我最初是为自己使用的,可以在以下网址找到:www.disktuna.com

还有一个免费的替代方案,但它无法处理太严重的腐败问题www.anderspedersen.net

自从我写了答案后,我还发现了 Jpeg Medic (也仅适用于 Windows) 可以修复 jpeg:https://www.jpegmedic.com

答案2

维基百科文章http://en.wikipedia.org/wiki/JPEG#Entropy_coding有很多信息 - 与您当前的问题最相关的是这个:

用前一个量化 DC 系数来预测当前量化 DC 系数。编码的是两者之间的差值,而不是实际值。63 个量化 AC 系数的编码不使用这种预测差分。

图像其余部分的颜色偏移是由单个不良 DC 系数引起的,该系数会级联到其余所有部分。您可能能够找到一个可以可靠地影响颜色的小区域(可能是一个字节,也可能是两个字节 - 实际上可能是一些位序列),然后尝试大量不同的值。

在图形编辑器中修复图像可能更容易 - 看起来您发布的图像除了偏移(和环绕)之外,可能只是亮度较低,您可以选择该区域并使用“色阶”工具。其他涉及更多颜色偏移的图像,您可能能够通过查看颜色通道中的分解(JPG 可能为 RGB 或 Y'CbCr)并分别修复每个通道(可能交换通道)来获得足够好的结果。

编辑:哎呀,我没看到你的问题有多老了。好吧,也许这对你或其他人有用。

答案3

2)如何在 Linux 下的二进制文本编辑器中安全地打开和编辑该文件?

很多优秀的二进制编辑器可以在这里找到: https://stackoverflow.com/questions/839227/how-to-edit-binary-file-on-the-unix-systems

我个人最喜欢的是vim使用 :%!xxd hack 和十六进制编辑

答案4

你试过了吗photorec?你可以在 Ubuntu 上像这样安装它:

sudo apt-get install testdisk

使用以下命令检查手册:

man photorec

photorec从终端运行如下:

photorec

它会要求您选择源和目标,然后尝试自动恢复 jpg 文件。

为了防止损坏原件,我建议使用该命令进行复制dd。祝你好运!

相关内容