是否有可能知道 JPEG 图像是否仅从其原始字节旋转?

Sor*_*scu 4 .net c# jpeg rotation

您能判断(假设使用 .NET 4.0、WinForms)JPEG 图像是否仅从其二进制(如 的结果File.ReadAllBytes())旋转?

更新


到目前为止,谢谢大家的回答。

对于任何试图解决同一问题的人来说,这只是一个提示。我被这个System.Drawing.Image类欺骗了,它在初始化时加载 EXIF 标签,FromFile(...)但在从流初始化时似乎忽略了它们。我正在使用ExifTagCollection库来读取 EXIF 标签,但我想结果将与任何其他库相媲美。

var bytes = (get binary from server)
File.WriteAllBytes(path, bytes);
Run Code Online (Sandbox Code Playgroud)

作品

var image = Image.FromFile(path);
Run Code Online (Sandbox Code Playgroud)

不起作用:(也失败FileStream了)

using (var ms = new MemoryStream(bytes))
{
    image = Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)

继续:

ExifTagCollection exif = new ExifTagCollection(image);
foreach (ExifTag tag in exif)
{
    Console.WriteLine(tag.ToString());
}
Run Code Online (Sandbox Code Playgroud)

如果从流加载,则没有标签。

Jon*_*nna 5

http://jpegclub.org/exif_orientation.html详细说明了 exif 方向标志。找到那个,找到方向。

当然,这仅适用于通过设置该标志来旋转图像,这通常由相机本身、一些不是为更详细的编辑而设计的图像查看软件以及一些直接来自文件管理器的工具完成. 如果有人将图像加载到更通用的图像编辑器中,将其翻转,然后将其保存,则它将不起作用。

编辑:

横向与纵向与“从图像设备自然方向旋转”不同。它也更简单:

if(img.Height == img.Width)
  return MyAspectEnum.Square;
if(img.Height > img.Width)
  return MyAspectEnum.Portrait;
return MyAspectEnum.Landscape;
Run Code Online (Sandbox Code Playgroud)

这可能更接近您真正想了解的内容。