【问题标题】:How in C# can I tell if a JPEG image is progressive如何在 C# 中判断 JPEG 图像是否是渐进式的
【发布时间】:2017-09-23 16:01:17
【问题描述】:

JPEG 可以用不同的方式编码;基线、渐进式等。

如何确定 C# 中是否使用了渐进式

【问题讨论】:

  • 其实可以用其他几种方式进行编码。顺序很常见。然后是不太常见的 JPEG 模式。

标签: c# .net image-processing encoding jpeg


【解决方案1】:

基于 HTML 版本 http://techslides.com/demos/progressive-test.html,逐步编码的 JPEG 包含字节 FFC2。

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"));
}

【讨论】:

  • 你为什么要将字节转换为字符串呢?这是非常低效的,它可能会导致字节“AF FD 8B”被错误地视为“FF D8”的匹配项。此外,似乎可以使用比“前 500 个字节中某处存在 2 字节序列”更准确的方法。
  • 好吧,要么实际弄清楚 jpeg 标头的工作原理并正确检测它,要么只循环字节并按 2 的顺序检查它们以检测您的属性。当然它会在你身边有更多的代码,但我相当肯定它仍然会比字符串比较更有效。事实上,字符串工具是一种获得结果的捷径,但这并不意味着这些简单的调用背后没有更多的事情发生。
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多