Jpg dosyamı açmaya çalıştığımda neden "JPEG dosyası değil: 0x89 0x50 ile başlıyor" mesajını alıyorum?
Jpg dosyamı açmaya çalıştığımda neden "JPEG dosyası değil: 0x89 0x50 ile başlıyor" mesajını alıyorum?
Yanıtlar:
Dosya aslında yanlış dosya uzantısına sahip bir PNG'dir. "0x89 0x50", bir PNG dosyasının nasıl başladığını gösterir.
Dosyanız bir JPEG dosyası değil, sadece yol boyunca bir PNG'den JPEG'e yeniden adlandırıldı. Bazı programlar bunu tanınan bir dosya uzantısı olarak açar ve türü önekten çıkarır, ancak tabii ki kullandığınızdan değil.
sadece * .jpg'yi * .png olarak yeniden adlandırın. Veya bu dosyayı tarayıcıda açın
Unix benzeri platformda gerçek dosya türünü kontrol etmek için hızlı bir geçiş:
"dosya" komutunu kullanarak, örneğin:
file e3f8794a5c226d4.jpg
ve çıktı
e3f8794a5c226d4.jpg: PNG image data, 3768 x 2640, 8-bit/color RGBA, non-interlaced
Bu, dosya bilgileri ayrıntılarını yazdırır ve ayrıca belirtilen dosyanın imha edilip edilmediğini kontrol edebilir.
Bu, jpeg dosyalarını açmak için libjpeg kullanan bir JPEG dosya görüntüleyicisini kullanarak bir PNG dosyasını açmaya çalıştığınızda oluşan hata yanıtıdır. Dosyanız, önceki cevaplarda belirtildiği gibi png'den JPEG'e yeniden adlandırılmıştır.
Bir dizindeki bu jpg görüntülerini tanımlamak için bir python betiği.
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")
İşte Mohit komut dosyasının değiştirilmiş bir sürümü. Yanlış adlandırılmış dosyaları silmek yerine, zarar vermeden yeniden adlandırır.
Ayrıca os.system () çağrılarını, dosya adlarındaki tırnaklarla ilgili kaçış sorunlarını çözen alt işlem çağrılarını değiştirir.
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")