>

몇 일 전에 나는 다른 분야에서 질문을했습니다 마지막으로 친구 (@emcconville)가 "모든 JPEG 파일을 단일 파일로 복구"스크립트를 도와주었습니다. 이제이 프로그램은 표준 "JFIF"이미지에서만 작동하며 "EXIF"표준 이미지 (디지털 카메라로 촬영 한 이미지)를 검색 할 수 없다는 것을 깨달았습니다.

이미지의 Exif 표준을 알 수 있도록 프로그램을 변경하는 방법은 무엇입니까? 저는 파이썬에 익숙하지 않으며 그 힘을 모릅니다.

감사합니다

import struct
with open('src.bin', 'rb') as f:
    # Calculate file size.
    f.seek(0, 2)
    total_bytes = f.tell()
    # Rewind to beging.
    f.seek(0)
    file_cursor = f.tell()
    image_cursor = 0
    while file_cursor < total_bytes:
        # Can for start of JPEG.
        if f.read(1) == b"\xFF":
            if f.read(3) == b"\xD8\xFF\xE0":
                print("JPEG FOUND!")
                # Backup and find the size of the image
                f.seek(-8, 1)
                payload_size = struct.unpack('<I', f.read(4))[0]
                # Write image to disk
                d_filename = 'image{0}.jpeg'.format(image_cursor)
                with open(d_filename, 'wb') as d:
                    d.write(f.read(payload_size))
                image_cursor += 1
        file_cursor = f.tell()


  • 답변 # 1

    와이즈 비즈

    그냥 변경

    EXIF files have a marker of 0xffe1, JFIF files have a marker of 0xffe0. So all code that relies on 0xffe0 to detect a JPEG file will miss all EXIF files. (from here)

    to

    if f.read(3) == b"\xD8\xFF\xE0":
    
    

    두 경우를 모두 확인하려면 if f.read(3) == b"\xD8\xFF\xE1": 를 사용하지 마십시오  더 이상 그런 식으로 대신에

    .read()
    
    
    x = f.read(3) if x in (b"\xD8\xFF\xE0", b"\xD8\xFF\xE1"):

  • 이전 javascript - 부트 스트랩 축소가 열리고 닫히는 지 확인하는 방법은 무엇입니까?
  • 다음 python - numpyallclose가 비대칭 비교를 사용하는 이유는 무엇입니까?