जब मैं अपना jpg फाइल खोलने की कोशिश करता हूं तो मुझे "Not a JPEG फाइल: 0x89 0x50 से शुरू होता है" संदेश क्यों मिल रहा है?
जब मैं अपना jpg फाइल खोलने की कोशिश करता हूं तो मुझे "Not a JPEG फाइल: 0x89 0x50 से शुरू होता है" संदेश क्यों मिल रहा है?
जवाबों:
फाइल वास्तव में गलत फाइल एक्सटेंशन के साथ एक PNG है। "Ix89 0x50" एक PNG फ़ाइल कैसे शुरू होती है।
आपकी फाइल JPEG फाइल नहीं है, इसे सिर्फ PNG से बदलकर JPEG बना दिया गया है। कुछ प्रोग्राम इसे एक मान्यता प्राप्त फ़ाइल एक्सटेंशन के रूप में खोलेंगे और उपसर्ग से प्रकार का अनुमान लगाएंगे, लेकिन स्पष्ट रूप से वह नहीं जो आप उपयोग कर रहे हैं।
बस * .jpg से * .png का नाम बदलें। या इस फाइल को ब्राउजर में खोलें
यहां यूनिक्स-जैसे प्लेटफॉर्म पर वास्तविक प्रकार की फ़ाइल की जांच करने के लिए एक त्वरित पास दिया गया है:
"फ़ाइल" कमांड का उपयोग करना, जैसे:
file e3f8794a5c226d4.jpg
और आउटपुट है
e3f8794a5c226d4.jpg: PNG image data, 3768 x 2640, 8-bit/color RGBA, non-interlaced
जो फ़ाइल जानकारी के विवरण को प्रिंट करेगा, और यह भी जांच सकता है कि निर्दिष्ट फ़ाइल को नष्ट कर दिया गया है या नहीं।
यह त्रुटि प्रतिक्रिया है जब आप JPEG फ़ाइल दर्शक जो jpeg फ़ाइलों को खोलने के लिए libjpeg का उपयोग करता है का उपयोग करके PNG फ़ाइल खोलने का प्रयास करते हैं। आपकी फ़ाइल का नाम बदलकर png से JPEG कर दिया गया है जैसा कि पहले के उत्तर में बताया गया है।
यहाँ एक निर्देशिका में उन गलती jpg छवियों की पहचान करने के लिए एक अजगर स्क्रिप्ट है।
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")
यहां मोहित की स्क्रिप्ट का एक संशोधित संस्करण है। गलत फ़ाइलों को हटाने के बजाय, यह गैर-विनाशकारी रूप से उनका नाम बदल देता है।
यह सबप्रॉसेस कॉल्स के लिए os.system () कॉल को स्वैप करता है जो फाइलनाम में उद्धरणों से संबंधित मुद्दों से बच निकलता है।
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")