Warum erhalte ich die Fehlermeldung: "Keine JPEG-Datei: beginnt mit 0x89 0x50" [geschlossen]


83

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

Antworten:


98

Die Datei ist eigentlich ein PNG mit der falschen Dateierweiterung. "0x89 0x50" ist der Start einer PNG-Datei.


Ich habe einen Screenshot auf meinem iPhone 7 mit iOS 12.0.1 gemacht und dann Fotos für Google Drive freigegeben. Verwendete beim Speichern den Standard- / vorgeschlagenen Namen und hatte diesen Fehler beim Versuch, unter Ubuntu mit Image Viewer zu öffnen. Nachdem Sie diese Antwort gelesen haben, haben Sie die Erweiterung in PNG geändert und die Datei geöffnet, ohne sie in einem anderen Programm zu konvertieren oder erneut zu speichern.
Brent Self

58

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


1
Wenn Sie diese Dateien finden möchten
Zickzack

8

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


6

Hier ist ein kurzer Überblick über den tatsächlichen Dateityp auf einer Unix-ähnlichen Plattform:

Verwenden Sie den Befehl "Datei" wie:

file e3f8794a5c226d4.jpg 

und Ausgabe ist

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

Dadurch werden Details zu Dateiinformationen gedruckt und es kann auch überprüft werden, ob die angegebene Datei zerstört wurde.


1

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


1

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

1

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 Probleme im Zusammenhang mit 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
Hinzufügen zur Antwort von Different55. Das Skript funktioniert nur für Python Version 3.5 und höher.
Ashwin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.