Neden şu hatayı alıyorum: "Bir JPEG dosyası değil: 0x89 0x50 ile başlıyor" [kapalı]


Yanıtlar:


102

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.


İOS 12.0.1 yüklü iPhone 7'imde, ardından Google Drive'da paylaşılan Fotoğraflar'dan bir ekran görüntüsü aldım. Kaydederken varsayılan / önerilen adı kullandı ve Ubuntu'da Image Viewer ile açmaya çalışırken bu hatayı aldı. Bu yanıtı okuduktan sonra, uzantıyı PNG olarak değiştirdi ve dosya başka bir programda dönüştürmeden veya yeniden kaydetmeden açıldı.
Brent Self

Cevap için teşekkürler. Bir jpeg dosyası neyle başlar?
maddypie

60

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.


2
Bu dosyaları bulmak istiyorsanız, bu StackOverflow bağlantısını kullanabilirsiniz: stackoverflow.com/questions/30684796/…
zikzak

9

sadece * .jpg'yi * .png olarak yeniden adlandırın. Veya bu dosyayı tarayıcıda açın


9

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.


2

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.


1

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")

1

İş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")

1
Different55'in cevabına ekleniyor. Komut dosyası yalnızca Python sürüm 3.5 ve üzeri için çalışır.
Ashwin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.