Reparar arquivos jpg quebrados

9

Olá, tenho certeza de que houve muitas perguntas semelhantes, mas depois de pesquisar muito, não encontrei nenhum post descrevendo minha situação.

Eu tenho alguns arquivos jpg que têm algumas cores erradas depois de um certo ponto e também cada pixel é deslocado para a esquerda. Eu acho que isso é por causa de alguns bytes ausentes no ponto em que ele muda. Eu tentei editar o arquivo com o vi, mas parece impossível descobrir onde estão os bytes ausentes, também o vi é muito complicado de usar. Eu também tentei nano mas não é seguro para binário.

Esta é uma das imagens em questão:

Então, quero fazer duas perguntas:

  1. Como posso reparar essas imagens no Linux?
  2. Como eu poderia abrir e editar o arquivo com segurança em um editor de texto binário no Linux?

Editar: Usando o hexedit eu descobri que da posição 0x27F000 para 0x27F403 existem apenas uns 0xff, e de 0x27F404 para 0x27FFFF existem apenas zeros 0x00. Isso faz algo assim:

    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.....

Alterando esses bytes com números aleatórios, consegui desviar a imagem, mas ainda há o problema de cor.

Alguém poderia me indicar alguma documentação sobre codificação jpeg para que eu possa descobrir como um bloco 8x8 termina?

Eu estou querendo saber porque as posições são tão precisas (0x27F000 a 0x27FFFF), isso poderia ser um bug da minha câmera ou do cartão de memória que eu usei?

    
por Falk 23.06.2013 / 15:23

3 respostas

1

2) How could I safely open and edit the file in a binary text editor under Linux?

Muitos ótimos editores binários podem ser encontrados aqui: link

Meus favoritos pessoais são vim com:%! xxd hack e hexedit

    
por 24.06.2013 / 15:08
1

O artigo da Wikipédia sobre o link tem muitas informações - o mais relevante para o seu problema atual é esse :

The previous quantized DC coefficient is used to predict the current quantized DC coefficient. The difference between the two is encoded rather than the actual value. The encoding of the 63 quantized AC coefficients does not use such prediction differencing.

A mudança de cor no restante da imagem é causada por um único coeficiente DC ruim que cai em cascata para todo o resto. Você pode encontrar uma pequena área (talvez um byte, talvez dois - é provavelmente uma sequência de bits) que afeta as cores de forma confiável e tenta um grande número de valores diferentes para isso.

Pode ser mais fácil simplesmente consertar a imagem em um editor gráfico - parece que o que você postou, além do deslocamento (e envolvente), pode simplesmente ter um brilho menor, você pode selecionar a área e usar os Níveis ferramenta. Outros que envolvem mais mudanças de cores, você pode obter um resultado bom o suficiente observando a decomposição em canais de cores (os JPGs podem estar em RGB ou Y'CbCr) e consertando cada canal separadamente, possivelmente trocando canais.

EDIT: Opa, eu não vejo quantos anos sua pergunta foi. Bem, talvez isso seja útil para você ou para outra pessoa.

    
por 01.01.2015 / 07:57
0

Já experimentou o photorec? Você pode instalá-lo no Ubuntu assim:

sudo apt-get install testdisk

Verifique o manual com:

man photorec

e apenas execute o photorec no terminal como:

photorec

Ele irá selecionar a origem e o destino e tentar recuperar arquivos jpg automaticamente.

Para evitar danos ao original, recomendo fazer uma cópia com o comando dd. Boa sorte!

    
por 24.10.2017 / 21:29

Tags