如何获取照片的EXIF信息?

lxj0596 2015-05-30 11:44:55
手机拍的照片在手机里看角度一般是正常,上传到电脑后就是旋转90度的了,代码中如何读取EXIF信息来判断,C#试了一下Image.PropertyItems,里面可以访问到的参数好少,不象Java等其它的可以那么多直接指定方向旋转信息 ... 求解!
...全文
898 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
socg 2016-07-13
  • 打赏
  • 举报
回复
exif中有旋转角度信息,一般的看图软件会读取这个信息,旋转后显示给你,网站上传就不一定了,我曾经写过一个软件读取旋转角度,然后真实的旋转图片数据,再清除旋转信息,这样任何软件和网站显示出来的图片方向都是正确的了。我的软件“爱拍批量压缩”,你可以搜一下
s8848 2015-06-01
  • 打赏
  • 举报
回复
可以考虑做个图片的检测,是不是正的还是反的,.不过好像更加麻烦了
dangdaa 2015-06-01
  • 打赏
  • 举报
回复
mark
s8848 2015-05-31
  • 打赏
  • 举报
回复
Exif 不是所有的图像都有的,有的图像就没有整个信息.JPEG和TIFF等有整个标签,bmp好像没有整个标签.标签的读取是楼上的说了.
zhoujk 2015-05-31
  • 打赏
  • 举报
回复
不同厂商的设备,EXIF的字段不一样,曾经想自己写个EXIF读取类,发现这个问题以后就放弃了
tcmakebest 2015-05-31
  • 打赏
  • 举报
回复
EXIF能否解决照片角度的问题,我觉得有点悬,楼主不妨发一张大家看下
  • 打赏
  • 举报
回复
嗯,上面缺少几个方法
static string ByteToString(byte[] b, int startindex)
{
    if (startindex + 1 <= b.Length)
        return ((char)b[startindex]).ToString();
    else
        return string.Empty;
}

static string ShortToString(byte[] b, int startindex)
{
    if (startindex + 2 <= b.Length)
        return BitConverter.ToInt16(b, startindex).ToString();
    else
        return string.Empty;
}

static string RationalToSingle(byte[] b, int startindex)
{
    if (startindex + 8 <= b.Length)
        return (BitConverter.ToSingle(b, startindex) / BitConverter.ToSingle(b, startindex + 4)).ToString();
    else
        return string.Empty;
}

static string ASCIIToString(byte[] b)
{
    return Encoding.ASCII.GetString(b);
}
这在网上很容易搜到。由于网上的基本上都不是原创而是互相抄了很多遍的,找不到真正的原创的地址,我就不贴出其地址了。
  • 打赏
  • 举报
回复
你可以这样读取
private static Dictionary<string, string> ReadExif(Image image)
{
    var exif = new Dictionary<string, string>();
    var properties = image.PropertyItems;
    foreach (var property in properties)
    {
        switch (property.Id)
        {
            case 0x010E:
                exif["ImageTitle"] = ASCIIToString(property.Value);
                break;
            case 0x010F:
                exif["Make"] = ASCIIToString(property.Value);
                break;
            case 0x0110:
                exif["Model"] = ASCIIToString(property.Value);
                break;
            case 0x0112:
                exif["Orientation"] = ShortToString(property.Value, 0);
                break;
            case 0x011A:
                exif["XResolution"] = RationalToSingle(property.Value, 0);
                break;
            case 0x011B:
                exif["YResolution"] = RationalToSingle(property.Value, 0);
                break;
            case 0x0128:
                exif["ResolutionUnit"] = ShortToString(property.Value, 0);
                break;
            case 0x0131:
                exif["Software"] = ASCIIToString(property.Value);
                break;
            case 0x0132:
                exif["DateTime"] = ASCIIToString(property.Value);
                break;
            //GPS
            case 0x0002:
                exif["GPSLatitude"] = string.Format("{0}°{1}′{2}″",
                                                    RationalToSingle(property.Value, 0),
                                                    RationalToSingle(property.Value, 8),
                                                    RationalToSingle(property.Value, 16)
                                                    );
                break;
            case 0x0004:
                exif["GPSLongitude"] = string.Format("{0}°{1}′{2}″",
                                                    RationalToSingle(property.Value, 0),
                                                    RationalToSingle(property.Value, 8),
                                                    RationalToSingle(property.Value, 16)
                                                    );
                break;
            case 0x0006:
                exif["GPSAltitude"] = RationalToSingle(property.Value, 0);
                break;
        }
    }
    return exif;
}
threenewbee 2015-05-30
  • 打赏
  • 举报
回复
http://www.codeproject.com/Articles/27242/ExifTagCollection-An-EXIF-metadata-extraction-libr

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧