ddrescue를 사용하여 오래된 하드 드라이브의 대부분을 구출한 다음 photorec을 사용하여 파일을 복구했습니다. 완전히 복원된 사진이 많아서 정말 좋습니다. 그러나 반쯤 읽을 수 있고 중간에 멈춰 있거나 헤더가 손상되어 열 수 없는 손상된 JPEG 파일도 많이 있습니다.
이제 파일 중간에 데이터가 손상된 파일의 경우 김프는 적어도 손상이 발생할 때까지 이미지를 표시하기 때문에 김프를 사용하여 파일을 엽니다.
다음을 수행할 수 있는 도구가 있습니까?
- 파일의 전체 부분을 열고 함께 병합할 수 있습니다(손상, 김프 "JPEG 파일의 조기 끝", "잘못된 JPEG 파일 구조: SOI 태그 2개" 등의 오류로 인해 중지되지 않음).
- 단순히 열리지 않는 손상된 파일의 일부 부분을 복구하기 위해 올바른 헤더 설정을 찾는 데 도움이 될 수 있습니다.
답변1
헤더 없이 이미지의 "꼬리"를 재구성하는 것은 어렵습니다.
안타깝게도 그렇죠일반적으로 말하면이미지 압축 및 JPEG 작동 방식으로 인해 이는 불가능합니다.
첫째, JPEG는 최종 단계에서 Huffman 인코딩됩니다. 일반적으로 산술 인코딩은 드물며, 적어도 제가 들은 바는 그렇습니다. 이는 압축된 데이터의 부호와 압축되지 않은 데이터의 의미를 알려주는 테이블(또는 이진 트리의 다른 인코딩)이 필요하다는 것을 의미합니다.
JPEG에서는 JPEG 표준에서 제공하는 미리 만들어진 테이블 중 하나를 사용할 수 있습니다. 또는 데이터를 보고 인코딩 중인 정확한 이미지에 더 적합한 테이블을 만들 수 있습니다. 일반적으로 카메라와 소프트웨어 인코더는 후자를 수행합니다. 손실 없이 충분히 저렴하고 공간 절약적입니다.
그러나 이는 테이블이 없으면 데이터가 완전히 임의의 비트처럼 보이고 디코딩될 수 없음을 의미합니다.
다행히도 유사한 이미지에 대해 미리 계산된 "사용자 정의" 테이블만 사용하는 카메라를 사용하고 있습니다(매우 일반적인 JPEG 정규화 테이블을 사용하는 것보다 다소 낫지만 각 사진에 대한 통계를 다시 계산할 필요는 없습니다). 따라서 허프만 테이블을 재활용하는 것은 실제로 가능합니다.
하지만 실제로 문제는 테이블을 알 때까지 해독할 수 없다는 것입니다. 그러면 읽을 수 있는 꼬리에 얼마나 많은 8×8 이미지 데이터 블록이 있는지 알 수 없습니다. 하지만 이는 블록 수가 고정된 직사각형 이미지입니다. 따라서 다른 파일의 시작 부분을 손상된 시작 부분에 넣으면 압축 정도에 따라 필요한 것보다 더 많거나 적은 블록을 얻게 됩니다! 하지만 여전히 깨진 이미지가 남습니다.
TL: 아니요, 어렵습니다. 운이 좋다고 해도 시행착오가 많습니다.