Pourquoi est-ce que je reçois le message "Not a JPEG file : starts with 0x89 0x50" lorsque j'essaie d'ouvrir mon fichier jpg ?
Réponses
Trop de publicités?
Mohit Arvind khakharia
Points
128
Voici un script python pour identifier ces images jpg défectueuses 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")
Different55
Points
394
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 remplace également les appels os.system() par des appels de sous-processus, ce qui résout les problèmes d'échappement des 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")
- Réponses précédentes
- Plus de réponses