2017-04-26 25 views
0

JPEGはさまざまな方法でエンコードできます。ベースライン、プログレッシブなどC#でJPEG画像がプログレッシブであるかどうかを知る方法

プログレッシブは、HTML版http://techslides.com/demos/progressive-test.html徐々にエンコードされたバイトFFC2が含まれているJPEGに基づいてC#の

+0

実際には、いくつかの方法でエンコードできます。シーケンシャルは非常に一般的です。その後、あまり一般的でないJPEGモードがあります。 – user3344003

+0

面白いおかげで – John

答えて

-1

で使用された場合、私が判断することができますどのように。

FFC2 markerはプログレッシブ画像にのみ存在するフレームの開始を示します。

var imageUrl = "progress.jpg"; 

using (var wc = new WebClient()) 
{ 
    byte[] imageBytes = wc.DownloadData(imageUrl); 

    string hex = BitConverter.ToString(imageBytes.Take(500).ToArray()); 
    var imageAsHex = hex.Replace("-", "").ToUpper(); 

    Console.WriteLine("Is JPEG: " + imageAsHex.Contains("FFD8")); 
    Console.WriteLine("Is Progressive: " + imageAsHex.Contains("FFC2")); 
} 
+0

なぜバイトを文字列に変換しますか?それはとてもひどく非効率的で、 "AF FD 8B"のようなものが "FF D8"のマッチとして間違って見えることがあります。また、 "最初の500バイトのどこかに2バイトのシーケンスが存在する"というより正確な方法のように思えます。 – Nyerguds

+0

良い点、他に提案がありますか? – John

+0

さて、実際にjpegヘッダーがどのように動作して正しく検出されるか、またはバイトをループして2のシーケンスでチェックしてプロパティを検出してください。確かにそれはあなたの側でより多くのコードがありますが、私はかなりそれがまだ文字列の比較よりも効率的になるとかなり確信しています。ファクトストリングツールは、結果を得るための短い方法であっても、これらの単純な呼び出しの背後には多くのことが起こるわけではありません。 – Nyerguds

関連する問題