Android 照片属性获取

手机照片的属性获取

import android.media.ExifInterface;

import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.utils.CoordinateConverter;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * CreateTime 2017/8/7 14:34
 * Author LiuShiHua
 * Description:获取照片的属性
 */

public class PhotoAttrsUtil {

    public static PictureAttrs getPhotoAttrs(String path) {
        if (path == null) return null;
        File file = new File(path);
        if (!file.exists()) return null;
        String TAG_APERTURE = null;     //光圈值
        String TAG_DATETIME = null;     //拍照时间
        String TAG_EXPOSURE_TIME = null;//曝光时间
        String TAG_FLASH = null;        //闪光灯
        String TAG_FOCAL_LENGTH = null; //焦距
        String TAG_IMAGE_LENGTH = null; //图片高度
        String TAG_IMAGE_WIDTH = null;  //图片宽度
        String TAG_ISO = null;          //ISO
        String TAG_MAKE = null;         //设备品牌
        String TAG_MODEL = null;        //设备型号,整形表示
        String TAG_ORIENTATION = null;  //旋转角度
        String TAG_WHITE_BALANCE = null;//白平衡
        String TAG_GPS_LATITUDE_REF = null;//纬度 [南S/北N]
        String TAG_GPS_LONGITUDE_REF = null;//经度 [东E/西W]

        String TAG_GPS_LATITUDE = null;//纬度
        String TAG_GPS_LONGITUDE = null;//经度


        try {
            ExifInterface exifInterface = new ExifInterface(path);
            TAG_APERTURE = exifInterface.getAttribute(ExifInterface.TAG_APERTURE);
            TAG_DATETIME = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
            TAG_EXPOSURE_TIME = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
            TAG_FLASH = exifInterface.getAttribute(ExifInterface.TAG_FLASH);
            TAG_FOCAL_LENGTH = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
            TAG_IMAGE_LENGTH = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
            TAG_IMAGE_WIDTH = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
            TAG_ISO = exifInterface.getAttribute(ExifInterface.TAG_ISO);
            TAG_MAKE = exifInterface.getAttribute(ExifInterface.TAG_MAKE);
            TAG_MODEL = exifInterface.getAttribute(ExifInterface.TAG_MODEL);
            TAG_ORIENTATION = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);
            TAG_WHITE_BALANCE = exifInterface.getAttribute(ExifInterface.TAG_WHITE_BALANCE);
            TAG_GPS_LATITUDE_REF = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
            TAG_GPS_LONGITUDE_REF = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
            TAG_GPS_LONGITUDE_REF = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
            TAG_GPS_LONGITUDE_REF = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
            TAG_GPS_LATITUDE = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
            TAG_GPS_LONGITUDE = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
        } catch (IOException e) {
            e.printStackTrace();
        }

//        L.d("光圈值:" + TAG_APERTURE);
//        L.d("拍摄时间:" + TAG_DATETIME);
//        L.d("曝光时间:" + TAG_EXPOSURE_TIME);
//        L.d("闪光灯:" + TAG_FLASH);
//        L.d("焦距:" + TAG_FOCAL_LENGTH);
//        L.d("图片高度:" + TAG_IMAGE_LENGTH);
//        L.d("图片宽度:" + TAG_IMAGE_WIDTH);
//        L.d("ISO:" + TAG_ISO);
//        L.d("设备品牌:" + TAG_MAKE);
//        L.d("设备型号:" + TAG_MODEL);
//        L.d("旋转角度:" + TAG_ORIENTATION);
//        L.d("白平衡:" + TAG_WHITE_BALANCE);
//        L.d("纬度:" + getRationalLatLonToFloat(TAG_GPS_LATITUDE, TAG_GPS_LATITUDE_REF));
//        L.d("经度:" + getRationalLatLonToFloat(TAG_GPS_LONGITUDE, TAG_GPS_LONGITUDE_REF));

        LatLng latLng = new LatLng(getRationalLatLonToFloat(TAG_GPS_LATITUDE, TAG_GPS_LATITUDE_REF),
                getRationalLatLonToFloat(TAG_GPS_LONGITUDE, TAG_GPS_LONGITUDE_REF));
        LatLng baidu = transGoogleGpsToBaiduGps(latLng);
        return new PictureAttrs(getTimeFormat(TAG_DATETIME), TAG_MODEL, baidu.latitude, baidu.longitude, null);
    }

    //将经纬度String转换成double
    private static double getRationalLatLonToFloat(String rationalString, String ref) {
        if (rationalString == null || ref == null) return 0.0;
        String[] parts = rationalString.split(",");
        String[] pair;
        pair = parts[0].split("/");
        double degrees = Double.parseDouble(pair[0].trim()) / Double.parseDouble(pair[1].trim());
        pair = parts[1].split("/");
        double minutes = Double.parseDouble(pair[0].trim()) / Double.parseDouble(pair[1].trim());
        pair = parts[2].split("/");
        double seconds = Double.parseDouble(pair[0].trim()) / Double.parseDouble(pair[1].trim());
        double result = degrees + (minutes / 60.0) + (seconds / 3600.0);
        if ((ref.equals("S") || ref.equals("W"))) {
            return -result;
        }
        return result;
    }

    public static class PictureAttrs {
        private String time;
        private String model;//手机型号
        private double latitude;//纬度
        private double longitude;//经度
        private String seaLevel;//海拔高度

        public PictureAttrs(String time, String model, double latitude, double longitude, String seaLevel) {
            this.time = time;
            this.model = model;
            this.latitude = latitude;
            this.longitude = longitude;
            this.seaLevel = seaLevel;
        }

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        public String getModel() {
            return model;
        }

        public void setModel(String model) {
            this.model = model;
        }

        public double getLatitude() {
            return latitude;
        }

        public void setLatitude(double latitude) {
            this.latitude = latitude;
        }

        public double getLongitude() {
            return longitude;
        }

        public void setLongitude(double longitude) {
            this.longitude = longitude;
        }

        public String getSeaLevel() {
            return seaLevel;
        }

        public void setSeaLevel(String seaLevel) {
            this.seaLevel = seaLevel;
        }
    }

    //转换时间格式
    private static String getTimeFormat(String resTime) {
        if (Tools.isEmpty(resTime)) return "";
        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").parse(resTime);
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return resTime;
    }

    //转换成百度坐标
    private static LatLng transGoogleGpsToBaiduGps(LatLng sourceLatLng) {
        CoordinateConverter converter = new CoordinateConverter();
        converter.from(CoordinateConverter.CoordType.GPS);
        converter.coord(sourceLatLng);
        return converter.convert();
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值