2017-04-10 2 views
0

0xFFD9はJPEG画像に存在する必要はないので(EOFマーカーとして)、存在していてもjpegに埋め込まれたサムネイルによって誤った結果が出る可能性があるので、JPEGを解析して、 gジップ)。私は、マーカーに2バイトの長さが続くという仮定に基づいてJavaコードを次のようにしています。しかし、これはSOSセグメント、すなわち0xFFDAマーカーの場合には当てはまらない。 JPEGでEOFをどのように検出できますか?jpegイメージの末尾に追加されたデータを抽出する方法(jpeg EOFを検出する)。

public String getJPEGAppendedData(DataInputStream in) { 
    StringBuilder message = new StringBuilder(); 
    try { 
     // reading first two bytes 0xFFD8 
     in.readFully(new byte[2]); 

     // 0xFFXX 
     byte twoBytes[] = new byte[2]; 

     while (true) { 
      in.readFully(twoBytes); 
      if (twoBytes[0] == (byte) 0xFF) { 
        if (twoBytes[1] == (byte) 0xDD) { 
         // fixed 4 bytes payload 
         in.readFully(new byte[4]); 
        } else if (twoBytes[1] == (byte) 0xD9) { 
         // end of image reached 
         break; 
        } else if (twoBytes[1] >= (byte) 0xD0 && twoBytes[1] <= (byte) 0xD7) { 
         // no payload 
        } else { 
         // reading payload length form two bytes 
         short length = in.readShort(); 
         System.out.println(length); 

         // skipping payload 
         for (int i = 1; i <= length - 2; i++) { 
          in.readByte(); 
         } 
        } 
      } else { 
       break; 
      } 
     } 

     // reading appended data (byte by byte) if any 
     boolean moreData = true; 
     while (moreData) { 
      try { 
       byte b = in.readByte(); 
       message.append(String.format("%02X", b)); 
      } catch (Exception e) { 
       moreData = false; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return message.toString(); 
} 

答えて

0

私はあなたが最後を検出する必要はないと思います。

メッセージを生成している場合は、画像を含むバイト配列の最後に移動し、存在しない場合はEOI (ddf9)が存在するかどうかを検出するだけでメッセージを追加してメッセージを追加できます。

EOIは画像の最後であるため、既に存在する場合でも追加できます。

あなたのメッセージを読んで、ファイルの末尾から読み取られ、ddf9を検出(メッセージ自体に存在することができるので、@@[email protected]@のような長い区切りを選択し、それを検出する方が良いでしょう。

例えば画像を与えられました

a certain black hole

下のあなたは

enter image description here

以下のように画像配列を生成することができます
+0

いいえ自分でメッセージを生成していません。私のプログラムは、任意の画像を受け入れ、もしあれば追加されたデータを抽出する(ステガノグラフィー)。 –

関連する問題