Hola, estoy seguro de que se hicieron muchas preguntas similares, pero después de buscar mucho no encontré ninguna publicación que describiera mi situación.
Tengo algunos archivos jpg que tienen algunos colores incorrectos después de un cierto punto y también cada píxel se desplaza hacia la izquierda. Creo que esto se debe a que faltan algunos bytes en el punto donde cambia. Traté de editar el archivo con vi pero parece imposible descubrir dónde están los bytes faltantes, también vi es muy complicado de usar. También probé nano pero no es seguro para binarios.
Esta es una de las imágenes en cuestión:
Entonces quiero hacerte dos preguntas:
- ¿Cómo puedo reparar esas imágenes en Linux?
- ¿Cómo podría abrir y editar el archivo de forma segura en un editor de texto binario en Linux?
Editar: usando hexedit descubrí que desde la posición 0x27F000 a 0x27F403 solo hay unos 0xff, y de 0x27F404 a 0x27FFFF solo hay ceros 0x00. Esto hace algo como esto:
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.....
Cambiando estos bytes con números aleatorios pude quitar la imagen, pero aún existe el problema del color.
¿Podría alguien indicarme alguna documentación sobre la codificación jpeg para poder descubrir cómo termina un bloque de 8x8?
Me pregunto por qué las posiciones son tan precisas (0x27F000 a 0x27FFFF), ¿podría ser un error de mi cámara o de la tarjeta de memoria que utilicé?
Respuestas:
El artículo de Wikipedia en http://en.wikipedia.org/wiki/JPEG#Entropy_coding tiene mucha información, la más relevante para su problema actual es esta:
El cambio de color en el resto de la imagen es causado por un solo coeficiente de CC malo que cae en cascada con todo el resto. Es posible que pueda encontrar un área pequeña (tal vez un byte, tal vez dos, probablemente sea una secuencia de bits) que afecte de manera confiable a los colores y pruebe una gran cantidad de valores diferentes para eso.
Puede ser más fácil simplemente arreglar la imagen en un editor gráfico: se parece a la que publicó, que no sea el cambio (y envolvente), simplemente puede tener un brillo más bajo, puede seleccionar el área y usar la herramienta Niveles. Otros que tienen cambios de color más involucrados, es posible que pueda obtener un resultado lo suficientemente bueno mirando la descomposición en los canales de color (los JPG pueden estar en RGB o Y'CbCr) y arreglando cada canal por separado, posiblemente intercambiando canales.
EDITAR: Vaya, no vi cuántos años tenía tu pregunta. Bueno, tal vez esto sea útil para usted u otra persona.
fuente
Aquí se pueden encontrar muchos editores binarios excelentes: /programming/839227/how-to-edit-binary-file-on-the-unix-systems
Mis favoritos personales son vim con:%! Xxd hack y hexedit
fuente
shed
?¿Lo has intentado
photorec
? Puedes instalarlo en Ubuntu así:Consulte el manual con:
y simplemente correr
photorec
desde la terminal así:Le pedirá que seleccione la fuente y el destino e intente recuperar archivos jpg automáticamente.
Para evitar dañar el original, recomiendo hacer una copia con el
dd
comando. ¡Buena suerte!fuente
Acabo de usar Photorec para recuperar imágenes de una tarjeta SD que se dañó. Aunque no recuperó todos los archivos, hizo un gran trabajo recuperando un buen número de ellos. Dicho esto, los videos MP4 se recuperaron pero no se pudieron abrir. Se recuperaron algunos archivos JPEG, pero tampoco se pudieron ver o se desordenaron realmente, como se muestra en la muestra al comienzo de este hilo. Photorec no los reparó.
En pocas palabras: Photorec está diseñado para recuperar archivos perdidos de un SISTEMA DE ARCHIVO corrupto, pero aparentemente no hace nada para recuperar el contenido de ARCHIVOS corruptos.
fuente