「JPEGファイルではありません:0x890x50で始まります」というエラーが表示されるのはなぜですか[クローズ]


86

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

回答:


99

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


iOS12.0.1を搭載したiPhone7でスクリーンショットを撮り、写真をGoogleドライブに共有しました。保存時にデフォルト/推奨名を使用し、UbuntuでImageViewerを使用して開こうとするとこのエラーが発生しました。この回答を読んだ後、拡張子をPNGに変更し、別のプログラムで変換または再保存せずにファイルを開きました。
ブレントセルフ

答えてくれてありがとう。jpegファイルは何で始まりますか?
maddypie

60

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


2
これらのファイルを見つけたい場合は、次のStackOverflowリンクを使用できます:stackoverflow.com/questions/30684796/…–
ジグザグ

9

* .jpgの名前を* .pngに変更するだけです。または、このファイルをブラウザで開きます


7

Unixライクなプラットフォームでファイルの実際のタイプを確認するためのクイックパスは次のとおりです。

次のような「file」コマンドを使用します。

file e3f8794a5c226d4.jpg 

そして出力は

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

これにより、ファイル情報の詳細が出力され、指定されたファイルが破棄されているかどうかを確認することもできます。


2

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


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

1

これは、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")

1
Different55の答えに追加します。このスクリプトは、Pythonバージョン3.5以降でのみ機能します。
アシュウィン2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.