Pourquoi est-ce que je reçois l'erreur: "pas un fichier JPEG: commence par 0x89 0x50"
Pourquoi reçois - je le message "Pas un fichier JPEG: commence par 0x89 0x50" lorsque j'essaie d'ouvrir mon fichier jpg?
6 réponses
Le fichier est en fait un PNG avec la mauvaise extension de fichier. "0x89 0x50" est la façon dont un fichier PNG démarre.
Votre fichier N'est pas un fichier JPEG, il a juste été renommé D'un PNG à un JPEG quelque part en cours de route. Certains programmes l'ouvriront en tant qu'extension de fichier reconnue et en déduiront le type du préfixe, mais évidemment pas celui que vous utilisez.
C'est la réponse d'erreur lorsque vous essayez d'ouvrir un fichier PNG à l'aide D'une visionneuse de fichiers JPEG qui utilise libjpeg pour ouvrir des fichiers jpeg. Votre fichier est renommé de png en JPEG comme mentionné dans les réponses précédentes.
Voici un script python pour identifier ces images JPG de défaut dans un répertoire.
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")
Renommez simplement *.jpg, *d'.png. Ou ouvrez ce fichier dans le Navigateur
Voici une version modifiée du script de Mohit. Au lieu de supprimer les fichiers mal nommés, il les renomme de manière non destructive.
Il échange également le système d'exploitation.system() appelle des appels de sous-processus qui résolvent les problèmes d'échappement concernant les guillemets dans les noms de fichiers.
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")