मुझे त्रुटि क्यों मिल रही है: "JPEG फ़ाइल नहीं: 0x89 0x50 से शुरू होती है" [बंद]


86

जब मैं अपना jpg फाइल खोलने की कोशिश करता हूं तो मुझे "Not a JPEG फाइल: 0x89 0x50 से शुरू होता है" संदेश क्यों मिल रहा है?

जवाबों:


100

फाइल वास्तव में गलत फाइल एक्सटेंशन के साथ एक PNG है। "Ix89 0x50" एक PNG फ़ाइल कैसे शुरू होती है।


मैंने iOS 12.0.1 के साथ अपने iPhone 7 पर एक स्क्रीनशॉट लिया, फिर Google ड्राइव पर साझा किए गए फ़ोटो से। सहेजते समय डिफ़ॉल्ट / सुझाए गए नाम का उपयोग किया और छवि दर्शक के साथ Ubuntu पर खोलने का प्रयास करते समय यह त्रुटि थी। इस उत्तर को पढ़ने के बाद, पीएनजी के लिए एक्सटेंशन को बदल दिया और फ़ाइल को किसी अन्य प्रोग्राम में परिवर्तित या पुन: सहेजे बिना खोला गया।
ब्रेंट सेल्फ

जवाब के लिए धन्यवाद। एक jpeg फ़ाइल किसके साथ शुरू होती है?
maddypie

60

आपकी फाइल JPEG फाइल नहीं है, इसे सिर्फ PNG से बदलकर JPEG बना दिया गया है। कुछ प्रोग्राम इसे एक मान्यता प्राप्त फ़ाइल एक्सटेंशन के रूप में खोलेंगे और उपसर्ग से प्रकार का अनुमान लगाएंगे, लेकिन स्पष्ट रूप से वह नहीं जो आप उपयोग कर रहे हैं।


2
यदि आप उन फ़ाइलों को ढूंढना चाहते हैं, तो आप इस StackOverflow लिंक का उपयोग कर सकते हैं: stackoverflow.com/questions/30684796/…
zigzag

9

बस * .jpg से * .png का नाम बदलें। या इस फाइल को ब्राउजर में खोलें


7

यहां यूनिक्स-जैसे प्लेटफॉर्म पर वास्तविक प्रकार की फ़ाइल की जांच करने के लिए एक त्वरित पास दिया गया है:

"फ़ाइल" कमांड का उपयोग करना, जैसे:

file e3f8794a5c226d4.jpg 

और आउटपुट है

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

जो फ़ाइल जानकारी के विवरण को प्रिंट करेगा, और यह भी जांच सकता है कि निर्दिष्ट फ़ाइल को नष्ट कर दिया गया है या नहीं।


2

यह त्रुटि प्रतिक्रिया है जब आप JPEG फ़ाइल दर्शक जो jpeg फ़ाइलों को खोलने के लिए libjpeg का उपयोग करता है का उपयोग करके PNG फ़ाइल खोलने का प्रयास करते हैं। आपकी फ़ाइल का नाम बदलकर png से JPEG कर दिया गया है जैसा कि पहले के उत्तर में बताया गया है।


1

यहाँ एक निर्देशिका में उन गलती 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")

1

यहां मोहित की स्क्रिप्ट का एक संशोधित संस्करण है। गलत फ़ाइलों को हटाने के बजाय, यह गैर-विनाशकारी रूप से उनका नाम बदल देता है।

यह सबप्रॉसेस कॉल्स के लिए 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")

1
अलग-अलग 5555 के उत्तर को जोड़ना। स्क्रिप्ट केवल पायथन संस्करण 3.5 और इसके बाद के संस्करण के लिए काम करती है।
अश्विन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.