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
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:
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?
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
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.
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!