您的位置:首页 > 移动开发 > Android开发

Android 照片属性获取

2018-01-08 10:58 537 查看
手机照片的属性获取

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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  照片属性