为什么会收到错误消息:“不是JPEG文件:以0x89 0x50开头”


Answers:


99

该文件实际上是带有错误文件扩展名的PNG。PNG文件的启动方式为“ 0x89 0x50”。


我在装有iOS 12.0.1的iPhone 7上截图,然后从照片共享到Google云端硬盘。保存时使用默认/建议名称,尝试在Ubuntu上使用Image Viewer打开时出现此错误。阅读此答案后,将扩展名更改为PNG并打开文件,而无需进行转换或将其重新保存在另一个程序中。
布伦特(Brent Self)

谢谢你的回答。什么是一个JPEG文件,启动?
maddypie


9

只需将* .jpg重命名为* .png。或在浏览器中打开此文件


7

这是检查类Unix平台上文件真实类型的快速方法:

使用“文件”命令,例如:

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

这是一个Python脚本,用于识别目录中的那些故障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 '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.