zoukankan      html  css  js  c++  java
  • (四十三)获取图片exif信息

    1、什么是Exif

      Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了数码照片的信息,包括拍摄的光圈、快门、平衡白、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码以及GPS等。简单来说,Exif=拍摄参数+JPED。因此,可以利用任何可以查看JPEG文件的看图软件浏览Exif信息,但是并不是所有图形程序都能处理Exif信息,而自Android2.0之后,加入了对图片Exif数据的支持。

    2、ExifInterface

         在Android下,通过ExifInterface类操作图片的Exif信息,虽然这个类的名字包含Interface,但它不是一个接口,它是一个类,处于"android.media.ExifInterface"包下,是媒体库的一部分功能的实现。ExifInterface有一个构造函数,接受一个String类型的数据,此为读取图片文件的地址。

      Exif数据在图片中可以理解为Key-value键值对的方式存储,一般通过如下几个方法操作:

      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中有常量对应表示。

      以上常量不包括GPS的信息,实际上Exif还可以保存拍摄时GPS的信息,但是需要设备支持。

    3、Android中显示照片的Exif信息的demo

    import android.media.ExifInterface;
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private ImageView img;
        String path="sdcard/DCIM/Camera/IMG_20130924_134616.jpg";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img=(ImageView)findViewById(R.id.imageView1);
            Bitmap bitmap=BitmapFactory.decodeFile(path);
            try {
                img.setImageBitmap(bitmap);
            } catch (Exception e) {
                e.printStackTrace();
            }
            /*
             * 目前Android SDK定义的Tag有:
            TAG_DATETIME 时间日期
            TAG_FLASH 闪光灯
            TAG_GPS_LATITUDE 纬度
            TAG_GPS_LATITUDE_REF 纬度参考 
            TAG_GPS_LONGITUDE 经度
            TAG_GPS_LONGITUDE_REF 经度参考 
            TAG_IMAGE_LENGTH 图片长
            TAG_IMAGE_WIDTH 图片宽
            TAG_MAKE 设备制造商
            TAG_MODEL 设备型号
            TAG_ORIENTATION 方向
            TAG_WHITE_BALANCE 白平衡
            */ 
            
            try {
                //android读取图片EXIF信息
                ExifInterface exifInterface=new ExifInterface(path);
                String smodel=exifInterface.getAttribute(ExifInterface.TAG_MODEL);
                String width=exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
                String height=exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
                Toast.makeText(MainActivity.this, smodel+"  "+width+"*"+height, Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    
    }
  • 相关阅读:
    self 和 super 关键字
    NSString类
    函数和对象方法的区别
    求两个数是否互质及最大公约数
    TJU Problem 1644 Reverse Text
    TJU Problem 2520 Quicksum
    TJU Problem 2101 Bullseye
    TJU Problem 2548 Celebrity jeopardy
    poj 2586 Y2K Accounting Bug
    poj 2109 Power of Cryptography
  • 原文地址:https://www.cnblogs.com/fuyanan/p/4267491.html
Copyright © 2011-2022 走看看