http://en.wikipedia.org/wiki/JPEG_File_Interchange_FormatのJFIF のウィキペディア ページには、JPEG ヘッダーの適切な説明が記載されています (ヘッダーには圧縮されていないラスター イメージとしてサムネイルが含まれています)。これにより、レイアウトのアイデアが得られ、情報を抽出するために必要なコードが得られます。
画像ヘッダーの 16 進ダンプ (リトル エンディアン表示):
sdk@AndroidDev:~$ head -c 48 stfu.jpg |hexdump
0000000 d8ff e0ff 1000 464a 4649 0100 0101 4800
0000010 4800 0000 e1ff 1600 7845 6669 0000 4d4d
0000020 2a00 0000 0800 0000 0000 0000 feff 1700
イメージ マジック (バイト 1,0)、App0 セグメント ヘッダー マジック (バイト 3,2)、ヘッダー長 (5,4) ヘッダー タイプ シグネチャ ("JFIF\0"||"JFXX\0")(バイト 6 ~ 10) 、バージョン (バイト 11、12) 密度単位 (バイト 13)、X 密度 (バイト 15、14)、Y 密度 (バイト 17、16)、サムネイル幅 (バイト 19)、サムネイル高さ (バイト 18)、および残り「Header Length」までがサムネイルデータです。
上記の例から、ヘッダーの長さが 16 バイト (バイト 6、5) で、バージョンが 01.01 (バイト 12、13) であることがわかります。さらに、サムネイルの幅とサムネイルの高さは両方とも 0x00 であるため、画像にはサムネイルが含まれていません。