Подтвердить что ты не робот

Почему я получаю ошибку: "Не файл JPEG: начинается с 0x89 0x50"

Почему я получаю сообщение "Не файл JPEG: начинается с 0x89 0x50", когда я пытаюсь открыть файл jpg?

4b9b3361

Ответ 1

Файл на самом деле является PNG с неправильным расширением файла. "0x89 0x50" - это запуск PNG файла.

Ответ 2

Ваш файл не является файлом JPEG, он просто переименован из PNG в JPEG где-то на этом пути. Некоторые программы откроют это как признанное расширение файла и выводят тип из префикса, но, очевидно, не тот, который вы используете.

Ответ 3

просто переименуйте *.jpg в *.png. Или откройте этот файл в браузере

Ответ 4

Вот быстрый шаг для проверки реального типа файла на Unix-подобной платформе:

используя команду "file", например:

file e3f8794a5c226d4.jpg 

и вывод

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

который напечатает информацию о файле, а также может проверить, был ли указанный файл уничтожен.

Ответ 5

Это ответ на ошибку при попытке открыть файл PNG с помощью средства просмотра файлов JPEG, которое использует libjpeg для открытия файлов jpeg. Ваш файл переименован из png в JPEG, как указано в более ранних ответах.

Ответ 6

Вот питон script, чтобы идентифицировать эти изображения ошибок 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")

Ответ 7

Здесь модифицированная версия скрипта Mohit. Вместо того, чтобы удалять файлы с неправильным именем, он неразрушающим образом переименовывает их.

Он также заменяет вызовы 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")