Olá, tenho certeza de que foram feitas 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 após um certo ponto e também todos os pixels são deslocados para a esquerda. Eu acho que isso é por causa de alguns bytes ausentes no ponto em que muda. Tentei editar o arquivo com o vi, mas parece impossível descobrir onde estão os bytes ausentes, também é muito complicado usar o vi. Eu também tentei nano, mas não é seguro para binários.
Esta é uma das imagens em questão:
Então, eu quero lhe fazer duas perguntas:
- Como posso reparar essas imagens no Linux?
- Como eu poderia abrir e editar com segurança o arquivo em um editor de texto binário no Linux?
Edit: using hexedit, descobri que da posição 0x27F000 a 0x27F403 existem apenas 0xff e de 0x27F404 a 0x27FFFF existem apenas zeros 0x00. Isso torna algo como isto:
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 cores.
Alguém poderia me indicar alguma documentação sobre a codificação jpeg para que eu possa descobrir como saber onde termina um bloco 8x8.
Eu estou querendo saber por que 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?
Respostas:
O artigo da wikipedia em http://en.wikipedia.org/wiki/JPEG#Entropy_coding possui muitas informações - a mais relevante para o seu problema atual é esta:
A mudança de cor no restante da imagem é causada por um único coeficiente de CC ruim que cai em cascata para todo o resto. Você pode encontrar uma área pequena (talvez um byte, talvez dois - provavelmente é uma sequência de bits) que afeta de maneira confiável as cores e tentar um grande número de valores diferentes para isso.
Pode ser mais fácil corrigir a imagem em um editor gráfico - parece que a que você postou, exceto a mudança (e envolvente), pode simplesmente ter um brilho mais baixo, você pode selecionar a área e usar a ferramenta Níveis. Para outras que envolvem mudanças de cores, é possível obter um resultado bom o suficiente observando a decomposição nos canais de cores (os JPGs podem estar em RGB ou Y'CbCr) e corrigindo cada canal separadamente, possivelmente trocando de canal.
EDIT: Opa, eu não vi quantos anos sua pergunta tinha. Bem, talvez isso seja útil para você ou outra pessoa.
fonte
Muitos editores binários excelentes podem ser encontrados aqui: /programming/839227/how-to-edit-binary-file-on-the-unix-systems
Meus favoritos pessoais são vim com:%! Xxd hack e hexedit
fonte
shed
?Você já tentou
photorec
? Você pode instalá-lo no Ubuntu assim:Verifique o manual com:
e apenas corra
photorec
do terminal assim:Ele solicitará que você selecione a fonte e o destino e tente recuperar os arquivos jpg automaticamente.
Para evitar danificar o original, recomendo fazer uma cópia com o
dd
comando Boa sorte!fonte
Acabei de usar o Photorec para recuperar fotos de um cartão SD corrompido. Embora não tenha recuperado todos os arquivos, ele fez um ótimo trabalho ao recuperar um bom número deles. Com isso dito, os vídeos MP4 foram recuperados, mas não puderam ser abertos. Alguns arquivos JPEG foram recuperados, mas também não puderam ser visualizados ou realmente foram alterados, como a amostra fornecida no início deste segmento. O Photorec não os corrigiu.
Conclusão: O Photorec foi projetado para recuperar arquivos perdidos de um FILE SYSTEMS corrompido, mas aparentemente não faz nada para recuperar o conteúdo de FILES corrompidos.
fonte