it-swarm.com.de

Warum erhalte ich die Fehlermeldung: "Keine JPEG-Datei: Beginnt mit 0x89 0x50"

Warum erhalte ich die Meldung "Keine JPEG-Datei: Beginnt mit 0x89 0x50", wenn ich versuche, meine JPG-Datei zu öffnen?

72
matt burns

Die Datei ist eigentlich eine PNG mit der falschen Dateierweiterung. Mit "0x89 0x50" wird eine PNG-Datei gestartet.

84
matt burns

Ihre Datei ist keine JPEG-Datei, sondern wurde auf dem Weg von einer PNG-Datei in eine JPEG-Datei umbenannt. Einige Programme öffnen diese als erkannte Dateierweiterung und leiten den Typ aus dem Präfix ab, aber offensichtlich nicht den, den Sie verwenden.

54
David M

Hier ist ein kurzer Durchgang, um den tatsächlichen Dateityp auf einer Unix-ähnlichen Plattform zu überprüfen:

verwenden Sie den Befehl "file" wie folgt:

file e3f8794a5c226d4.jpg 

und Ausgabe ist

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

hiermit werden Dateiinformationen gedruckt und es kann auch geprüft werden, ob die angegebene Datei zerstört wurde.

3
Liu Hao

benennen Sie einfach * .jpg in * .png um. Oder öffnen Sie diese Datei im Browser

3
user9015721

Hier ist ein python Skript, um diese fehlerhaften JPG-Bilder in einem Verzeichnis zu identifizieren.

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")

Dies ist die Fehlerreaktion, wenn Sie versuchen, eine PNG-Datei mit einem JPEG-Datei-Viewer zu öffnen, der zum Öffnen von JPEG-Dateien libjpeg verwendet. Ihre Datei wird von png in JPEG umbenannt, wie in früheren Antworten erwähnt.

1
saurabheights

Hier ist eine modifizierte Version von Mohits Skript. Anstatt falsch benannte Dateien zu löschen, werden sie zerstörungsfrei umbenannt.

Außerdem werden die Aufrufe von os.system () gegen Unterprozessaufrufe ausgetauscht, wodurch entstehende Probleme in Bezug auf Anführungszeichen in Dateinamen behoben werden.

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