android图片旋转之ExifInterface

ExifInterface是什么?

  • ExifInterface是Android系统在2.0以后,媒体库加入操作图片Exif的类,Exif是可交换图像文件格式,是专门为数码相机的照片而设定的,可以记录数码照片的属性信息和拍摄数据。简单点说就是保存照片信息的类 包括拍摄的光圈、快门、平衡白、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码以及GPS等。
    ExifInterface官方api说明

使用

  • ExifInterface既然是保存照片信息的,那么我们在有需要的时候就可以通过这类,来获取照片的一些数码参数来做适当来逻辑处理,比较典型的案例就是android有的机型拍照或者选择照片后,照片可能会被旋转。这个时候我们就可以通过这个类来获取图片的旋转角度信息了。
 // 从指定路径下读取图片,并获取其EXIF信息。这里传入需要获取图片的sd卡路径
 private int getBitmapDegree(String path) {
        int degree = 0;
        try {
            // 从指定路径下读取图片,并获取其EXIF信息
            ExifInterface exifInterface = new ExifInterface(path);
            // 获取图片的旋转信息
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                    ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    degree = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    degree = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    degree = 270;
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return degree;
    }

常用方法

  • String getAttribute(String tag):获取图片中属性为tag的字符串值。
  • double getAttribute(String tag,double defaultValue):获取图片中属性为tag的double值。
  • int getAttributeInt(String tag,defaultValue):获取图片中属性为tag的int值。
  • void setAttribute(String tag,String value):根据输入参数,设定图片Exif的值。
  • void saveAttrubutes():把内存中图片的Exif写入到图片中

可以看到,上面大部分方法操作了一个String类型的tag参数,此为Exif的属性,在ExifInterface中定义了一些字符串的静态常量表示这些tag值,常用如下:

  • TAG_APERTURE:光圈值。
  • TAG_DATETIME:拍摄时间,取决于设备设置的时间。
  • TAG_EXPOSURE_TIME:曝光时间。
  • TAG_FLASH:闪光灯。
  • TAG_FOCAL_LENGTH:焦距。
  • TAG_IMAGE_LENGTH:图片高度。
  • TAG_IMAGE_WIDTH:图片宽度。
  • TAG_ISO:ISO。
  • TAG_MAKE:设备品牌。
  • TAG_MODEL:设备型号,整形表示,在ExifInterface中有常量对应表示。
  • TAG_ORIENTATION:旋转角度,整形表示,在ExifInterface中有常量对应表示。
//获取参数值
 ExifInterface exifInterface = new ExifInterface(
 7                             "/sdcard/a.jpg");
 8                     String FFNumber = exifInterface
 9                             .getAttribute(ExifInterface.TAG_APERTURE);
10                     String FDateTime = exifInterface
11                             .getAttribute(ExifInterface.TAG_DATETIME);
12                     String FExposureTime = exifInterface
13                             .getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
14                     String FFlash = exifInterface
15                             .getAttribute(ExifInterface.TAG_FLASH);
16                     String FFocalLength = exifInterface
17                             .getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
18                     String FImageLength = exifInterface
19                             .getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
20                     String FImageWidth = exifInterface
21                             .getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
22                     String FISOSpeedRatings = exifInterface
23                             .getAttribute(ExifInterface.TAG_ISO);
24                     String FMake = exifInterface
25                             .getAttribute(ExifInterface.TAG_MAKE);
26                     String FModel = exifInterface
27                             .getAttribute(ExifInterface.TAG_MODEL);
28                     String FOrientation = exifInterface
29                             .getAttribute(ExifInterface.TAG_ORIENTATION);
30                     String FWhiteBalance = exifInterface
31                             .getAttribute(ExifInterface.TAG_WHITE_BALANCE);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • intent详解(一)、intent详解(二) 1、获取图片 1、相册以隐氏intent的方式打开系统默认的图库,...
    i冰点阅读 8,596评论 0 3
  • 每个人内心深处都有一个别人无法企及的地方,自己走不出,别人进不去。 这是孤独,还是畏惧? 最近看了一部韩剧——《邻...
    暖暖miracle阅读 2,761评论 0 0
  • 文章中汇总了包括切图、 标注、 字体 、图层命名等很多干货信息 移动端UI设计规范 http://blog.csd...
    Hey夏天阅读 13,456评论 0 14
  • 可能很多人认为,选择多比较好,可是,在现在这个社会,选择太多反而让人更加秘密,而此时,我感觉,选择太多,反而不好...
    六月芳菲阅读 7,208评论 0 2

友情链接更多精彩内容