101

jpgファイルを開こうとすると、「JPEGファイルではありません:0x890x50で始まります」というメッセージが表示されるのはなぜですか。

4

7 に答える 7

115

ファイルは実際にはファイル拡張子が間違ったPNGです。「0x890x50」は、PNGファイルの開始方法です。

于 2012-07-03T11:45:36.200 に答える
62

あなたのファイルはJPEGファイルではなく、途中でPNGからJPEGに名前が変更されただけです。一部のプログラムは、これを認識されたファイル拡張子として開き、プレフィックスからタイプを推測しますが、使用しているものではないことは明らかです。

于 2012-07-03T11:49:06.660 に答える
12

Your 'JPEG' file has wrong filename extension 'jpg' or 'jpeg', it's real type is most probably a PNG file.

Just try to rename file name from 'xxx.jpg' or 'xxx.jpeg' to 'xxx.png'.

Under most circumstances, programs distinguish file type with filename extension for convenience, however, if we specify a wrong filename extension(like 'jpg') to a file in other format(like a PNG file), the program will still try to load the PNG file with JPG library, an error will certainly be thrown to user.

Actually, different type of files always have different file header (first 1024 byte)

Here's a quick pass to check real type of the file on Unix-like platform:

using the "file" command, like:

file e3f8794a5c226d4.jpg 

and output is

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

which will print file information details, and we can also check if the specified file has been destructed.

于 2018-11-27T05:03:24.027 に答える
10

simply rename *.jpg to *.png. Or open this file in browser

于 2017-11-27T16:09:40.667 に答える
2

これは、libjpegを使用してjpegファイルを開くJPEGファイルビューアを使用してPNGファイルを開こうとした場合のエラー応答です。以前の回答で述べたように、ファイルの名前はpngからJPEGに変更されます。

于 2016-05-17T13:34:57.790 に答える
1

これは、ディレクトリ内のこれらの障害jpg画像を識別するためのPythonスクリプトです。

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")
于 2017-10-23T08:58:08.957 に答える
1

Here's a modified version of Mohit's script. Instead of deleting misnamed files, it non-destructively renames them.

It also swaps out the os.system() calls for subprocess calls which solves escaping issues regarding quotes in filenames.

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")
于 2018-04-15T23:19:13.103 に答える