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

标签 c# .net rotation jpeg

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

更新


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

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

var bytes = (get binary from server)
File.WriteAllBytes(path, bytes);

工作:

var image = Image.FromFile(path);

不工作:(FileStream 也失败)

using (var ms = new MemoryStream(bytes))
{
    image = Image.FromStream(ms);
}

继续:

ExifTagCollection exif = new ExifTagCollection(image);
foreach (ExifTag tag in exif)
{
    Console.WriteLine(tag.ToString());
}

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

最佳答案

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;

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

关于c# - 是否有可能知道 JPEG 图像是否仅从其原始字节旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932385/

相关文章:

c# - 2D图形优化技巧

c# - Expression<TDelegate>.Compile 和垃圾收集

iphone - iOS 旋转动画在 CAAnimationGroup 中发生不顺利

objective-c - TSAlertView 启用设备旋转

c# - 使用 CodeDomProvider 编译不允许 C# 或 VB 的新功能

c++ - 将无父场景项置于另一个场景项下

c# - 从 Web API 中的 Controller 返回由 OAuthAuthorizatioServer 生成的 JWT token

c# - Richtextbox 将行号转换为滚动条位置

c# - 如何使用 yield 在并行 block 或任务中返回 Item 的集合

c# - 如何将 ViewData 传递给类中的 Action 方法?