"JPEG 파일이 아닙니다 : 0x89 0x50으로 시작"오류가 발생하는 이유는 무엇입니까?


88

jpg 파일을 열려고 할 때 "JPEG 파일이 아닙니다 : 0x89 0x50으로 시작합니다"라는 메시지가 나타나는 이유는 무엇입니까?

답변:


102

파일은 실제로 파일 확장자가 잘못된 PNG입니다. "0x89 0x50"은 PNG 파일이 시작되는 방식입니다.


iOS 12.0.1이 설치된 iPhone 7에서 스크린 샷을 찍은 다음 사진에서 Google 드라이브로 공유했습니다. 저장할 때 기본 / 제안 된 이름을 사용했으며 이미지 뷰어로 Ubuntu에서 열려고 할 때이 오류가 발생했습니다. 이 답변을 읽은 후 확장자를 PNG로 변경하고 파일을 다른 프로그램에서 변환하거나 다시 저장하지 않고 열었습니다.
Brent Self

답변 해주셔서 감사합니다. jpeg 파일 은 무엇으로 시작합니까?
maddypie 20.10.16

60

파일은 JPEG 파일이 아니며 도중에 PNG에서 JPEG로 이름이 변경되었습니다. 일부 프로그램은이를 인식 된 파일 확장자로 열고 접두사에서 유형을 유추하지만 분명히 사용중인 유형은 아닙니다.


2
해당 파일을 찾으려면 다음 StackOverflow 링크를 사용할 수 있습니다. stackoverflow.com/questions/30684796/…
zigzag

9

* .jpg의 이름을 * .png로 변경하면됩니다. 또는 브라우저에서이 파일을 엽니 다.


9

다음은 유닉스 계열 플랫폼에서 실제 파일 유형을 확인하는 빠른 패스입니다.

다음과 같이 "file"명령을 사용합니다.

file e3f8794a5c226d4.jpg 

출력은

e3f8794a5c226d4.jpg: PNG image data, 3768 x 2640, 8-bit/color RGBA, non-interlaced

파일 정보 세부 정보를 인쇄하고 지정된 파일이 삭제되었는지 확인할 수도 있습니다.


2

이것은 libjpeg를 사용하여 jpeg 파일을 여는 JPEG 파일 뷰어를 사용하여 PNG 파일을 열려고 할 때 발생하는 오류 응답입니다. 이전 답변에서 언급했듯이 파일 이름이 png에서 JPEG로 변경됩니다.


1

다음은 디렉토리에서 결함 jpg 이미지를 식별하는 파이썬 스크립트입니다.

import glob 
import os 
import re 
import logging 
import traceback

filelist=glob.glob("/path/to/*.jpg")
for file_obj in filelist:
  try:

        jpg_str=os.popen("file \""+str(file_obj)+"\"").read()
        if (re.search('PNG image data', jpg_str, re.IGNORECASE)) or (re.search('Png patch', jpg_str, re.IGNORECASE)):
            print("Deleting jpg as it contains png encoding - "+str(file_obj))
            os.system("rm \""+str(file_obj)+"\"")
  except Exception as e:
    logging.error(traceback.format_exc())
print("Cleaning jps done")

1

다음은 Mohit 스크립트의 수정 된 버전입니다. 이름이 잘못된 파일을 삭제하는 대신 비파괴 적으로 이름을 바꿉니다.

또한 파일 이름의 따옴표와 관련된 이스케이프 문제를 해결하는 하위 프로세스 호출을 위해 os.system () 호출을 교체합니다.

import glob
import subprocess
import os
import re
import logging
import traceback

filelist=glob.glob("/path/to/*.jpg")
for file_obj in filelist:
    try:
        jpg_str = subprocess.check_output(['file', file_obj]).decode()
        if (re.search('PNG image data', jpg_str, re.IGNORECASE)) or (re.search('Png patch', jpg_str, re.IGNORECASE)): 

            old_path = os.path.splitext(file_obj)
            if not os.path.isfile(old_path[0]+'.png'):
                new_file = old_path[0]+'.png'
            elif not os.path.isfile(file_obj+'.png'):
                new_file = file_obj+'.png'
            else:
                print("Found PNG hiding as JPEG but couldn't rename:", file_obj)
                continue

            print("Found PNG hiding as JPEG, renaming:", file_obj, '->', new_file)
            subprocess.run(['mv', file_obj, new_file])

    except Exception as e:
        logging.error(traceback.format_exc()) 

print("Cleaning JPEGs done")

1
Different55의 답변에 추가합니다. 이 스크립트는 Python 버전 3.5 이상에서만 작동합니다.
Ashwin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.