2017-04-26 1 views

Répondre

-1

Sur la base de la version HTML http://techslides.com/demos/progressive-test.html un JPEG qui est codé contient progressivement les octets FFC2.

Le FFC2 marker indique le début de l'image qui est présente uniquement dans les images progressives.

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

Pourquoi voudriez-vous convertir les octets en chaîne bien? C'est tellement horriblement inefficace, et cela peut causer à tort que des octets "AF FD 8B" soient considérés comme correspondant à "FF D8". Aussi, semble être une méthode plus précise que "une séquence de 2 octets existe quelque part dans les 500 premiers octets" pourrait être utilisée. – Nyerguds

+0

Bon point, avez-vous d'autres suggestions? – John

+0

Eh bien, soit réellement comprendre comment l'en-tête de jpeg fonctionne et le détecter correctement, ou simplement faire une boucle sur les octets et les vérifier dans des séquences de 2 pour détecter vos propriétés. Bien sûr, il y aura plus de code de votre côté, mais je suis à peu près sûr que ce sera toujours plus efficace que les comparaisons de chaînes. Le fait que les outils de chaîne de caractères soient un court chemin pour obtenir un résultat ne signifie pas qu'il n'y a pas beaucoup plus de choses derrière ces simples appels. – Nyerguds