반응형
"JPEG 파일이 아닙니다 : 0x89 0x50으로 시작"오류가 발생하는 이유
jpg 파일을 열려고 할 때 "JPEG 파일이 아닙니다 : 0x89 0x50으로 시작입니까?"
파일은 파일이 잘못된 파일입니다. "0x89 0x50"은 PNG 파일이 시작되는 방식입니다.
JPEG 파일이 파일 도중에 PNG에서 JPEG로 이름이 변경되었습니다. 일부 프로그램은 인식 된 파일이 아닌 것으로 접두사에서 유형을 추론하지만 분명히 사용중인 유형은 아닙니다.
* .jpg의 이름을 * .png로 변경하면됩니다. 또는 브라우저 에서이 파일을 찾아 다.
다음은 유닉스 계열 플랫폼에서 실제 파일 유형을 확인하는 빠른 패스입니다.
다음과 같이 "file"명령을 사용합니다.
file e3f8794a5c226d4.jpg
출력은
e3f8794a5c226d4.jpg: PNG image data, 3768 x 2640, 8-bit/color RGBA, non-interlaced
파일 정보 세부 정보를 확인하고 인쇄 할 수 있습니다.
이 libjpeg를 사용하여 jpeg 파일을 여는 JPEG 파일 뷰어를 사용하여 PNG 파일을 열려고 할 때 발생하는 오류 응답입니다. 이전 답변에서 언급했듯이 파일 이름이 png에서 JPEG로 변경됩니다.
다음은 결함에서 결함 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")
다음은 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")
반응형
'ProgramingTip' 카테고리의 다른 글
Dispatcher.BeginInvoke : 람다를 System.Delegate로 변환 할 수 없습니다. (0) | 2020.10.26 |
---|---|
T-SQL에 노드를 연결하는 존재 함수가 있습니까? (0) | 2020.10.26 |
Golang 어디에서 문자를 인덱싱하는 방법은 무엇입니까? (0) | 2020.10.26 |
Ruby의 커널 클래스에 assert () 메소드를 추가하는 것이 관용적 인 Ruby입니까? (0) | 2020.10.26 |
Uri.Host와 Uri.Authority의 차이점은 무엇입니까? (0) | 2020.10.26 |