답변:
JPEG 파일에 대해 이야기하고 있다면 유틸리티 jpeginfo 가 바로 당신이 찾고있는 것입니다. 다양한 유형의 JPEG 오류 및 손상이 있는지 파일을 검사하고 오류 코드 (스크립트에 가장 유용한 것)를 반환하거나 오류가있는 파일을 삭제할 수 있습니다.
수동 확인에 의존하지 않고 모든 것이 제대로 복사되도록하기 위해 이것을 초기 파일 전송의 일부로 사용합니다. (그 후, 나는 정상적인 백업 / 비 트로트 보호의 일부로 체크섬이 변경되지 않도록합니다.)
이 프로그램은 명령 줄이며 소스 코드로 제공되지만 모든 Linux 배포판 또는 개발 환경이 올바르게 설정된 Mac에서 쉽게 빌드하고 사용할 수 있어야합니다. Cygwin 또는 MinGW를 사용하여 Windows에서 할 수 있다고 확신합니다. (예를 들어, 무결성을 보증 할 수는 없지만 이 블로그 게시물 은 합법적 인 것으로 보이며 사전 컴파일 된 다운로드를 포함합니다.) 직접 빌드하려면 다음을 수행하십시오.
$ git clone https://github.com/tjko/jpeginfo.git
Cloning into 'jpeginfo'...
[...]
Checking connectivity... done
$ cd jpeginfo/
$ ./configure && make
이것은 jpeginfo
당신이 제자리에서 실행하거나 원하는 곳에서 복사 할 수 있는 명령을 만들어야합니다 (아마도 사용 make install
)
그런 다음 다음과 같이 실행하십시오.
$ ./jpeginfo -c *.jpg
test1.jpg 1996 x 2554 24bit Exif P 6582168 [OK]
test2.jpg 1996 x 2554 24bit Exif P 6582116 Premature end of JPEG file [WARNING]
test3.jpg Corrupt JPEG data: 1 extraneous bytes before marker 0xe2 1996 x 2554 24bit Exif P 6582169 [WARNING]
여기서 test1.jpg는 완벽하고 test2.jpg 끝에서 몇 바이트를 삭제했으며 test3.jpg 헤더에서 임의의 바이트를 변경했습니다.
RAW 파일이있는 경우 DNG Validation 의 미국 미디어 사진가 협회 (American Society of Media Photographers ) 또는 Adobe의 DNG 변환기를 사용하여 독점적 인 RAW 형식을 일괄 검증하는 방법 에 대한 데이터 유효성 검사 세부 정보 에서이 페이지를 확인하십시오 . (불행히도 이것은 GUI 작업이며 반드시 쉽게 스크립팅 할 수있는 것은 아닙니다.)
1.2 버전의 DNG를 기본적으로 출력하는 카메라가 있다면 이미지 데이터의 내장 MD5 체크섬이 포함되어있어 훨씬 좋습니다. 불행히도 이것은 일반적인 이미지 메타 데이터와 함께 저장되지 않는 것 같습니다. 또는 최소한 exiftool 및 exiv2는이를 인식하지 못하며 일반적으로 1.2 DNG 파일을 읽습니다. 이는 현재 Adobe 검증을 알고있는 한 도구를 사용하는 유일한 방법입니다.
ImageVerifier가 원하는 것을 수행했습니다. 불행히도 더 이상 다운로드 할 수 없으며 2017 년 12 월 31 일에 지원이 중단되었습니다 ( Ingestamatic 및 ImageVerifier 더 이상 판매되지 않음 참조 ).
ImageVerifier (약간 IV)는 확인할 이미지 파일을 찾는 폴더 계층 구조를 순회합니다. TIFF, JPEG를 확인할 수 있습니다. PSD, DNG 및 DNG 이외의 원시 (예 : NEF, CR2)
IV는 많은 수의 이미지를 처리하도록 설계되었습니다. 이미지가 100,000 개 이상인 폴더 계층은 문제가되지 않습니다. 한 번의 테스트 실행에서 IV는 14 시간 동안 실행되었습니다.
IV가 수행하는 검증에는 구조 점검과 해시 점검의 두 가지 종류가 있습니다.
이것이 카메라에서 이미지를 다운로드하는 것이 아니라 컴퓨터에서 컴퓨터로 전송하는 것이 아니라면 파일 무결성에 대한 일반적인 접근 방식은 체크섬 입니다.
불행히도, 내가 아는 한 일반적인 "최종 사용자"이미지 형식 (jpeg, png, gif,…)은 자체적으로 무결성을 검사하지 않습니다. 그러나 자동화 된 처리를 암시하는 문제를 이해하면서 체크섬 도구 ( CRC32 , MD5 등)를 워크 플로에 통합하는 것은 실용적인 솔루션이 될 수 있습니다. 체크섬을 저장하는 일반적인 방법은 다음과 같이 확장자가 추가 된 동일한 파일 이름을 가진 파일을 갖는 것 img123.jpg → img123.jpg.md5
입니다.
이 방법을 사용하면 사이드카 파일의 무결성 또는 유사한 메커니즘으로 전송하려는 다른 항목을 확인할 수도 있다는 추가 이점이 있습니다. 그리고 나중에 체크섬 파일을 보관하면됩니다. (그리고 그것은 제한된 지식 범위 내에서 PS, LR 또는 다른 일반적인 도구에 통합되지 않은 단점이 있습니다.)
나는 check_media_integrity 간단한 파이썬 스크립트를 개발했다 .GitHub 에서 check_mi.py
다운로드 할 수있다.
https://github.com/ftarlao/check-media-integrity
나는 가이드 소개를 인용한다 :
check-mi는 미디어 파일 (사진, 비디오, 오디오)의 무결성을 자동으로 확인하는 Python 2.7 스크립트입니다. 단일 파일의 무결성 또는 폴더와 하위 폴더의 파일 세트를 재귀 적으로 확인할 수 있습니다. 마지막으로 불량 파일 목록과 경로 및 세부 정보를 CSV 형식으로 출력 할 수도 있습니다.
이 도구는 공통 라이브러리 (Pillow, ImageMagik, FFmpeg)를 사용하여 미디어 파일을 효과적으로 디코딩 할 수있는시기를 확인하여 파일 무결성을 테스트합니다. 경고, 이미지, 오디오 및 비디오 형식은 결함 및 손상에 대해 매우 탄력적이므로 도구가 손상된 파일을 모두 감지 할 수 없습니다.
check-mi는 100 % 신뢰도로 헤더 / 메타 데이터가 손상된 파일, 잘린 이미지 파일 (strict_level> 0) 및 장치 I / O 오류를 발견 할 수 있습니다.
check-mi는 일반적으로 모든 사소한 손상 (예 : 다른 값으로 덮어 쓴 미디어 파일의 작은 부분)을 감지 할 수 없습니다. 세부적으로, 단일 5MB jpeg 사진에서 실행되는 작은 무작위 실험으로 strict_level 1을 테스트했습니다.
이미지 파일의 일부 (간격)를 0으로 덮어 쓰면 손상을 50 % 확률로 감지하기 위해 간격 크기 = 1024KBytes가 필요합니다. 다른 임의의 값으로 이미지 파일의 일부 (간격)를 덮어 쓰면 4096 바이트에서 1024KB 사이의 간격 크기에 대해 약 85 %의 탐지 비율을 얻습니다.
디코딩 할 때 필로우, 완드 및 FFmpeg를 더 엄격하게 지시하는 방법을 알고있는 경우 알려주십시오.
허용되는 답변은 jpeginfo를 사용하는 것으로, C로 작성된 실제로 오래되고 유지 관리되지 않은 도구입니다 (또한 모듈 형 / 확장 가능하지 않음). 또한 해당 도구는 특정 EXIF 데이터 포인트를 찾는 것 같습니다 ( ~ 5 분 동안 소스 코드 를 통해 훑어보기 ).
file-type 이라는 더 나은 도구 인 IMO 는 사용하기가 매우 쉽습니다. 기본적으로 예제 코드를 복사하여 붙여넣고 코딩 방법을 모르는 경우 파일 이름을 수정하십시오. 알려진 특정 파일 형식과 관련된 마법 번호를 확인 하고 처리중인 파일 종류를 알려줍니다.
나는 아직도 이것보다 더 많은 보호 계층을 찾고 있습니다. 예를 들어, 임의의 데이터가 EXIF 메타 데이터를 지나서 (또는 그 안에) 저장되거나 매직 번호 뒤에 저장되는 경우 보안 문제가 발생할 수 있습니다. 계속해서 더 많은 보안 조치를 검토하고 나중에이 답변을 업데이트 할 수 있도록 노력하겠습니다.
게으른 웹 페이지에서 복사 한 예제 코드는 다음과 같습니다.
// Node.js
const readChunk = require('read-chunk');
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, fileType.minimumBytes);
fileType(buffer);
//=> {ext: 'png', mime: 'image/png'}
참고로,이 도구는 지속적으로 업데이트되고 있으며 (3 일 전 원래 답변으로 마지막 업데이트였습니다.) 현재 매주 3,691,850 개의 다운로드 횟수가 있습니다.