이미지 파일에서 메타 데이터를 제거하는 방법


17

[ OP에 의한 편집 # 1 : 이 질문은 exiftool 제작자 / 관리자 Phil Harvey 가 ExifTool 포럼중복 된 스레드에서 꽤 잘 대답했습니다 .]

[ OP에 의해 편집 # 2 : 에서 ExifTool 질문은 : ExifTool입니다 하지 모든 메타 데이터를 삭제하려고 할 때 파일에서 완전히 메타 데이터를 제거 할것입니다. '작성자 제한 사항'을 참조하십시오.]

기존 백업 드라이브에없는 사진에 대해 기존 하드 드라이브를 검색하고 싶습니다. 형식에는 jpg, png, tif 등이 있으며 다양한 원시 형식 (다른 카메라 모델 및 제조업체)이 있습니다.

나는 이미지 자체의 독창성에만 관심이 있고 exif 태그의 값, 주어진 exif 태그 자체의 존재 유무, 내장 된 썸네일 등의 차이로 인해 독창성이 아닌 독창성에 관심이 있습니다 ...

동일한 이미지의 다른 사본 사이에서 손상 / 데이터 부패가 발생하지 않을 것으로 예상되지만 크기 및 색상 변경으로 인한 차이점뿐만 아니라 그 차이를 감지하고 싶습니다.

[ OP에 의한 편집 # 3 : 설명을 위해 : 소량의 오 탐지가 용인 될 수 있고 (파일이 고유하지 않은 것으로 판명 된 경우), 오 탐지가 바람직하지 않습니다 (파일이 중복 된 것으로 잘못 판정 됨). ]

내 계획은 모든 메타 데이터를 제거한 후 md5sums를 기반으로 고유성을 식별하는 것입니다.

메타 데이터를 어떻게 제거 할 수 있습니까?

exiftool -all= <filename>충분?


1
JPEG 압축 라이브러리는 다른 방식으로 압축되므로 모든 메타 데이터를 제거하더라도 다른 JPEG 구현으로 압축 되었기 때문에 다른 체크섬이있는 동일한 이미지로 끝날 수 있습니다. 동일한 라이브러리를 사용하여 모든 이미지를 다시 저장해야합니다 (품질이 다소 떨어질 수 있음). 또한 모든 이미지를 어떻게 찾을 계획입니까? fileRAW 이미지 형식을 발견하지 못하고 find확장명에서만 작동합니다 (현재 가지고있는 것을 더 잘 설명하는 데 유용 할 수 있음)
grochmal

나는 다른 접미사를 의미 하는 find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"곳을 사용 하고 <...>있습니다.
Jeff

다른 압축 라이브러리에 대한 좋은 지적.
Jeff

1
BMP 정규화 이미지 convert image.jpg - | md5sum(ImageMagick)가 적절한 MD5 합계를 제공하는지 확인할 수 있습니다.
aventurin

1
지각 적으로 유사한 두 이미지가 얼마나 유사한지를 비교하는 데 유용한 파시라는 지각 해싱 알고리즘이 있습니다. stackoverflow에는 여기에 태그가 있습니다. stackoverflow.com/questions/tagged/phash 이제 두 파일을 비교하는 도구를 사용하는 것이 유용하지만 모든 일치 항목을 찾기 위해 작업 O (n * n)가 발생할 수 있습니다. 더 나은 워크 플로가 있을지 모르지만 나는 잘 모르고 있습니다. 그러나 파쉬 (Pash)는 당신을 하나로 이끌 수있는 빵 부스러기입니다. 분명히 ImageMagick이는 phash 지원의 어떤 종류가
infixed

답변:


12

jheadJPEG 파일에서 이미지가 아닌 메타 데이터를 제거 할 수 있습니다. 매뉴얼 페이지는 말합니다 :

-dc

JPEG 헤더에서 주석 필드를 삭제하십시오. 주석은 Exif 헤더의 일부가 아닙니다.

-de

Exif 헤더를 완전히 삭제하십시오. 다른 메타 데이터 섹션은 그대로 둡니다.

-di

IPTC 섹션이 있으면 삭제하십시오. 다른 메타 데이터 섹션은 그대로 둡니다.

-dx

XMP 섹션이 있으면 삭제하십시오. 다른 메타 데이터 섹션은 그대로 둡니다.

-du

jpeg에서 Exif가 아니고 주석이없고 이미지에 기여하지 않는 섹션 (예 : Photoshop에서 이미지에 남길 수있는 데이터)을 삭제하십시오.

-purejpg

이미지 렌더링에 필요하지 않은 모든 JPEG 섹션을 삭제하십시오. 다양한 응용 프로그램이 이미지에 남겨둔 메타 데이터를 제거합니다. -de -dc-du 옵션 의 조합 .


회전 태그는 '이미지 렌더링에 필요한
Jeff

1
명확해야하지만 JPEG 파일 에만 작동
serv-inc

6

나는 대부분의 이미지에 ImageMagick과 함께 갈 것입니다. 다른 라이브러리 구현은 다른 압축 결과를 생성하기 때문에 ImageMagick은 압축 통합을 수행 할 수 있습니다.

OS에는 읽고 쓸 수있는 라이브러리가 있기 때문에 일반적인 유형이 쉽습니다. 그래서:

find . -type f -name '*.jp*g' -o -type f -name '*.JP*G' \
       -exec mogrify -strip -taint -compress JPEG {} \;

find . -type f -name '*.png' -o -type f -name '*.PNG' \
       -exec mogrify -strip -taint -compress Lossless {} \;

find . -type f -name '*.gif' -o -type f -name '*.GIF' \
       -exec mogrify -strip -taint -compress LZW {} \;

이렇게하면 이미지가 같은 방식으로 작성됩니다. 그런 다음 다음을 수행 할 수 있습니다.

find . -type f -regextype posix-extended \
       -regex ".*\.(jpe?g|JPE?G|png|PNG|gif|GIF)" \
       -exec md5sum {} \; > checksums
sort -k 1 checksums |
cut -d ' ' -f 1 |
uniq -d |
while read x; do
    grep $x checksums
done

RAW 형식의 경우 Phil의 말대로 할 수있는 유일한 방법은 다음과 같습니다.

find . <blah blah> -exec exiftool -all= {} \;

그리고 체크섬은 동일합니다. 보다 이국적인 이미지 형식을 단일 구현으로 만들거나 엄격한 파일 형식으로 만들 수 있다는 점만 알고 있으면됩니다.

면책 조항 : 이것은 체크섬을 서로 비교하는 데 효과적입니다. 체크섬을 저장 한 다음 -strip업데이트 후 다시 실행 zlib하거나 libjpeg완전히 다른 체크섬으로 끝날 수 있습니다. 매번 모든 이미지에 대한 체크섬을 작성해야합니다. 이미지 품질에 대한 우려가 있다면 이것을 한 번만 실행하는 것이 좋습니다 .


내가 틀렸다면 수정 해 두 개의 파일이 동일한 이미지를 나타내지 만 두 개의 다른 라이브러리로 압축되었다고 가정하십시오. jpg가 손실되어 다른 픽셀로 '압축 해제'되지 않습니까?
Jeff

1
JPEG2000에는 잘 정의 된 DCT가 없지만 이미지 변환의 일부일뿐입니다. 허프만 코딩도 동일해야합니다. 그러나 표준이 진행되는 한 압축 라이브러리를 사용하여 결과를 실제로 압축 할 수 있습니다. 이론적으로 압축 라이브러리 (예 : zlib)는 항상 다른 결과를 생성하지만 (같은 알고리즘의 경우에도) 대부분의 jpeg 라이브러리는 제정신을 유지하기 위해 동일한 방식으로 RNG를 시드합니다 (예 : libjpeg가이를 수행함).
grochmal

@Jeff 손실은 정보가 손실된다는 것을 의미하므로 문제는 매우 자연 스럽다.
aventurin

물론 다른 압축 품질을 정의하면 (예 -quality:) 모든 베팅이 해제됩니다.
grochmal

이 답변에 문제가있을 수 있습니다. JFIFversion을 포함한 JFIF 태그는 imagemagick 옵션 으로 삽입 됩니다 -strip. 이것을 보려면 and로 exiftool -a -G1 -s <filename>만든 파일 에서 실행하십시오 . 확인하려면을 실행하십시오 . JFIF 버전이 다르면 향후 스크립트 실행에서이를 고려해야합니다. mogrify -stripexiftool -all=exiftool -a -G1 -s <original-filename> | grep JFIF
Jeff

6

imagemagick패키지 뿐만 아니라 JPEG를 위해 할 당신은 간단하게 할 수 있습니다

mogrify -strip *.jpg

에서 수동 :

-strip

bKGD, cHRM, EXIF, gAMA, iCCP, iTXt, sRGB, tEXt, zCCP, zTXt, 날짜 프로파일, 주석 또는 이러한 PNG 청크의 이미지를 제거하십시오.

훨씬 더 많은 정보와 경고가 여기에 있습니다 .

참고 : 이것은 @grochmal과 비슷하지만 훨씬 간단하고 간단합니다.


해당 스레드에 따라 exiftool -all= *.jpgjpg 데이터를 제거하는 것이 좋습니다 .
Walt W

0

방금 떠 올랐던 가능한 솔루션. 메타 데이터 문제를 회피합니다. 파일이 이미지 자체로 끝나고 모든 메타 데이터가 파일의 시작 부분에 있다고 가정합니다.

현재 백업 드라이브를 골드 드라이브라고합니다.

골드 드라이브의 이미지 :

  1. 임베드 된 썸네일을 제거하십시오.
  2. 끝에서 시작하여 파일을 청크 (예 : M = 100k 바이트)합니다. 첫 번째 테일 (파일의 끝을 포함)을 끝 청크로 참조하십시오.
  3. 각 청크의 md5sum을 계산하여 goldlist라는 마스터 목록에 저장하십시오.

기존 드라이브의 이미지 :

  1. 임베드 된 썸네일을 제거하십시오.
  2. 파일의 마지막 M 바이트를 마무리합니다.
  3. md5sum을 계산하십시오.
  4. 클래스 U : 합계가 골드리스트에 없으면 파일이 골드 드라이브에 고유하다는 결론을 내립니다. 골드 드라이브에 복사하십시오. 나머지 청크의 md5sum을 계산하여 골드리스트에 추가하십시오. 다음 파일로 넘어갑니다.
  5. 그렇지 않으면 두 번째에서 마지막 M 바이트까지 마무리하십시오. 그러나 나머지 바이트가 N = 50k보다 작 으면 M 바이트를 제거하지 마십시오. 대신 나머지를 약간 큰 크기의 청크로 처리하십시오. N은 헤더 영역이 소비하는 가장 큰 공간보다 커야합니다 (축소판 제외).
  6. 청크의 md5sum을 계산하십시오.
  7. goldlist 등과 비교하십시오.
  8. 클래스 D : 모든 청크에 대한 합계가 골드리스트에 있으면 중복 된 것으로 결론을 내립니다.
  9. CLASS P : 모든 덩어리하지만 마지막의 합계가 goldlist에있는 경우, 다음이 결론 아마 중복.

클래스 P에는 골드 드라이브에 있지만 이미지의 다른 바이트에 다른 exifdata가 있거나 손상 / 데이터 썩음이있는 이미지가 포함됩니다.

완료되면 CLASS P를 대화식으로 검토하여 골드 드라이브의 동료와 비교하십시오.

편집 # 3을 OP로 참조하십시오.

CLASS U 및 D 로의 배정은 100 % 정확해야합니다.

CLASS P의 크기는 청크 크기 M에 따라 달라집니다. 파일의 첫 번째 M + N 바이트는 거의 확실하게 일부 이미지 데이터 (및 모든 메타 데이터)를 포함하기 때문입니다.


게시물의 서식을 지정했습니다 (그래서 단락이 아닌 마크 다운 열거를 사용합니다). 아직도 나는 당신이 CLASS U, CLASS D, CLASS P의 의미를 알아내는 것이 꽤 난해하다는 것을 알았습니다.
grochmal

오래된 하드 드라이브의 각 이미지 파일을 세 개의 클래스 중 하나에 할당하십시오 U (nique), D (uplicate) P (robible duplicate)
Jeff

0

오래된 드라이브에 메타 데이터를 포함한 대부분의 복제본이 포함 된 경우 OP에 정의 된대로 고유 단계를 찾으려면 두 단계를 사용하십시오 (메타 데이터가 다른 경우에도 두 파일이 복제 된 것으로 간주).

  1. 언 드라이브되지 않은 파일의 md5sum을 사용하여 기존 드라이브의 어떤 파일이 현재 백업 드라이브에 고유하고 (이 대체 의미로) CLASS uU (스트립되지 않은 고유) 또는 CLASS D (업필)에 할당되는지 확인하십시오. 클래스 D는 100 % 정확합니다. CLASS uU는 작아야하고 (위의 가정에 따라) 실제 복제본 (OP Sense)과 고유 한 특성이 혼합되어 있어야합니다.

  2. CLASS uU에서 작고 관리 가능한 파일 세트로 작업하는 경우 md5sum 및 다양한 탈지 기술을 사용하여 OP에 배치 된 목적에 유용한 파일 비교 방법을 설계하십시오.


0

이것은 약간 오래되었지만 exiftool이 잘 작동합니다.

메타 데이터 표시

exiftool photo.jpg

모든 * .jpg 파일에 대해 metedata 표시

참고 : 확장명은 대소 문자를 구분 합니다.

exiftool -ext jpg

위와 동일하지만 하위 디렉토리를 포함합니다.

exiftool -r -ext jpg .

모든 메타 데이터 제거

exiftool -all= -overwrite_original photo.jpg

현재 디렉토리에서 모든 * .jpg 파일의 모든 메타 데이터 제거

exiftool -all= -overwrite_original -ext jpg 

위와 동일하지만 하위 디렉토리를 포함합니다.

exiftool -all= -r -overwrite_original -ext jpg .

현재 디렉토리에서 * .jpg 파일의 모든 GPS 메타 데이터 제거

exiftool -gps:all= *.jpg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.