如果 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/