1

我正在使用 System.Drawing.Image 加载 JPG 图像。

我发现一张图片的 EXIF 方向标签 (0x0112) 类型=9, len=4

通常当我加载图像时,我会得到 Type = 3 (Array of uint16, len = 2(bytes))。一个线索是当我通过 EXIFTool ( http://www.sno.phy.queensu.ca/~phil/exiftool/ ) 运行它时,我注意到 Exif 字节顺序是 Little-endian (Intel, II)。所以,我有点想 System.Drawing.Image 中的 EXIF 处理不支持这个字节顺序,或者我需要以某种方式从 Little Endian -> Big Endian 转置字节?字节数不适合那个。我的其他一些正确解析的图像是 Big Endian(虽然还没有全部检查过)。

在 PropertyItem.Type 的文档中,未列出 9: https ://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.type(v=vs.110).aspx

相关代码片段:

    public static Image RemoveImageOrientation(this Image imageIn)
    {
        if(imageIn.HasOrientationExifTag())
        {
            var orientationPropItem = imageIn.GetPropertyItem((int)ImagePropertyItemMetaData.PropertyTagOrientation);

            if(orientationPropItem.Type != 3 // array of uint16
                || orientationPropItem.Len != 2) // only one 1 uint (2 bytes)
            {
                throw new ArgumentException("Unable to parse orientation EXIF tag.  Type = " + orientationPropItem.Type + ", len = " + orientationPropItem.Len);
            }

            var orientationExifTag = BitConverter.ToUInt16(orientationPropItem.Value, 0);
4

0 回答 0