web-dev-qa-db-ja.com

バイトの内容を識別する方法[]はJPEGですか?

より大きなメッセージエンベロープの一部として受信およびデコードする小さなバイト配列(25K未満)を持っています。これは画像である場合もあれば、JPGである場合もあります。バイト配列以外のコンテキスト情報はありません。IS画像である場合と、画像のタイプがJPGである場合の両方を識別する必要があります。

先頭、末尾、またはオフセットを特定するために確認できるマジックナンバー、またはマジックバイトはありますか?

私のコードの例は次のようになります(c/pではなくメモリから):

byte[] messageBytesAfterDecode = retrieveBytesFromEnvelope();
if(null != messageBytesAfterDecode && messageBytesAfterDecode > 0){
    if(areTheseBytesAJpeg(messageBytesAfterDecode)){
        doSomethingWithAJpeg(messageBytesAfterDecode)
    }else{
        flagEnvelopeAsHavingBadContentInTheField();
    }
}

私は本当に入るものが必要です

areTheseBytesAJpeg(byte[] mBytes){}

メソッド、またはそれを詳述する仕様へのポインタです。私は本当にこれらを画像などに読みたくないので、この決定を行う非常に迅速な方法があることを望んでいます。

31
Kylar

ウィキペディアから:

JPEG画像ファイルはFF D8で始まり、FF D9で終わります。

http://en.wikipedia.org/wiki/Magic_number_(programming)

53
zsalzbank

Jpegを使用した他のファイル形式に関する追加情報:ファイルの先頭にこれらのバイトが含まれています

BMP : 42 4D
JPG : FF D8 FF EO ( Starting 2 Byte will always be same)
PNG : 89 50 4E 47
GIF : 47 49 46 38

いくつかのコード:

private static Boolean isJPEG(File filename) throws Exception {
    DataInputStream ins = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
    try {
        if (ins.readInt() == 0xffd8ffe0) {
            return true;
        } else {
            return false;

        }
    } finally {
        ins.close();
    }
}
13
RATHI

マジックナンバー(JPEGファイルを含む)に関する「知識」のもう1つの情報源は、GNU/Linux magicコマンドで使用されるfileファイルです。

fileコマンドがインストールされている場合、file --versionmagicファイルがどこにあるかを教えてくれます。テキストエディターを使用して、man 5 magicを注意深く読むことができます。

(そしてmagicファイルの内容は他の回答の詳細を確認します。)

7
Stephen C

引用 このウィキペディアの記事

JPEG画像ファイルはFF D8で始まり、FF D9で終わります。 JPEG/JFIFファイルにはASCII "JFIF"(4A 46 49 46)のコードがnullで終了する文字列として含まれています。JPEG/ ExifファイルにはASCIIコードが含まれています"Exif"(45 78 69 66)の場合もnullで終了する文字列として、ファイルに関するメタデータが続きます。

6
user257111

多くのフォーマットは、いわゆるマジックナンバーで識別されます。これらは通常、ファイルの前にあるバイトシーケンスであり、次のバイナリデータが実際に思っているとおりかどうかを識別します。クイックGoogle検索が返されました: http://www.linfo.org/magic_number.html そして具体的には引用:

「同様に、JPEG(Joint Photographic Experts Group)画像ファイルに一般的に使用されるマジックナンバーは0x4A464946で、ASCII JFIF(JPEG File Interchange Format)に相当します。ただし、JPEGマジックナンバーは追加の例には、MIDI(Musical Instrument Digital Interface)ファイルの場合は0x4D546864、bzip2圧縮ファイルの場合は0x425a6831415925が含まれます。 "

4
damg

JPGファイルには、JPGファイルである可能性が非常に高いかどうかを判断するために使用できる特定のヘッダーがあります。ただし、ファイル全体をバイト配列に含めるかどうかは明確ではありません。

とにかく、ここにヘッダーの詳細があります: http://www.fastgraph.com/help/jpeg_header_format.html

0
Jonathan Wood