当前位置:  开发笔记 > 编程语言 > 正文

获取EXIF方向标记,旋转到正确方向,处理图像并以正确的方向保存图像

如何解决《获取EXIF方向标记,旋转到正确方向,处理图像并以正确的方向保存图像》经验,为你挑选了1个好方法。



1> Hans Passant..:
  var exif = new EXIFextractor(ref bmp, "n")

使用库来实现功能可以节省大量时间.或者,当图书馆设计不当或难以使用时,您会陷入困境. ref bmp是第一个响亮的警报,你试图将值指定为字符串,从而使它成为绝望的陷阱.这很有吸引力,因为您不必考虑正确的setTag()重载中"类型"可能意味着什么.它是类型3,需要一个带有两个元素的byte [].这根本不可发现,只有在不需要时才能正确使用库.

放弃图书馆,没有用.存储方向的EXIF标记的ID为0x112,并编码为16位值.只需直接使用System.Drawing读取值并强制它回到1.像这样:

static void FixImageOrientation(Image srce) {
    const int ExifOrientationId = 0x112;
    // Read orientation tag
    if (!srce.PropertyIdList.Contains(ExifOrientationId)) return;
    var prop = srce.GetPropertyItem(ExifOrientationId);
    var orient = BitConverter.ToInt16(prop.Value, 0);
    // Force value to 1
    prop.Value = BitConverter.GetBytes((short)1);
    srce.SetPropertyItem(prop);

    // Rotate/flip image according to 
    switch (orient) {
        // etc...
    }
}

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有