Android 图片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写入到图片中。
3 上代码
public class MainActivity extends Activity {
ArrayList<String> fileNames = new ArrayList<String>(); //本地图片路径
String imgPath;
StringBuilder text = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileNames.clear();
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA)); //图片的保存位置的数据
fileNames.add(new String(data, 0, data.length - 1));
}
if (fileNames.size() > 0) {
imgPath = fileNames.get(4);
}
TextView show = (TextView)findViewById(R.id.show);
//show.setText(imgPath);
/*
* 目前Android SDK定义的Tag有:
public static final String TAG_ORIENTATION = "Orientation"; 方向
public static final String TAG_DATETIME = "DateTime"; 时间日期
public static final String TAG_MAKE = "Make"; 设备制造商
public static final String TAG_MODEL = "Model"; 设备型号
public static final String TAG_FLASH = "Flash"; 闪光灯
public static final String TAG_IMAGE_WIDTH = "ImageWidth"; 图片宽
public static final String TAG_IMAGE_LENGTH = "ImageLength"; 图片长
public static final String TAG_GPS_LATITUDE = "GPSLatitude"; 纬度
public static final String TAG_GPS_LONGITUDE = "GPSLongitude"; 经度
public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef"; 纬度参考
public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef"; 经度参考
public static final String TAG_EXPOSURE_TIME = "ExposureTime"; 曝光时间
public static final String TAG_APERTURE = "FNumber"; 光圈值
public static final String TAG_ISO = "ISOSpeedRatings";
*/
try {
//android读取图片EXIF信息
ExifInterface exifInterface=new ExifInterface(imgPath);
String Orientation=exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);
String DateTime=exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
String Make=exifInterface.getAttribute(ExifInterface.TAG_MAKE);
String Model=exifInterface.getAttribute(ExifInterface.TAG_MODEL);
String Flash=exifInterface.getAttribute(ExifInterface.TAG_FLASH);
String ImageWidth=exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
String ImageLength=exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
String ExposureTime=exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
String FNumber=exifInterface.getAttribute(ExifInterface.TAG_APERTURE);
String ISOSpeedRatings=exifInterface.getAttribute(ExifInterface.TAG_ISO);
text.append("路径---" + imgPath + "\n");
text.append("方向---" + Orientation + "\n");
text.append("时间日期---" + DateTime + "\n");
text.append("设备制造商---" + Make + "\n");
text.append("设备型号---" + Model + "\n");
text.append("闪光灯---" + Flash + "\n");
text.append("图片宽---" + ImageWidth + "\n");
text.append("图片长---" + ImageLength + "\n");
text.append("曝光时间---" + ExposureTime + "\n");
text.append("光圈值---" + FNumber + "\n");
text.append("ISOSpeedRatings---" + ISOSpeedRatings + "\n");
exifInterface.setAttribute("mytag", "test");
text.append("mytag---" + exifInterface.getAttribute("mytag") + "\n");
} catch (Exception e) {
e.printStackTrace();
}
show.setText(text);
}
}
注意要加上权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
code见https://github.com/huanyi0723/ExifDemo
Android 图片Exif信息相关的获取与修改的更多相关文章
- Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息
1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...
- Android--操作图片Exif信息
前言 在Android系统中,图片文件在内存中以像素点的二维数组加载,存放像素信息,还会在开头加上一些额外的照片拍摄参数信息,这些信息就是Exif.Android2.0之后,媒体库加入了操作图片Exi ...
- Android 获取图片exif信息
使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...
- 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
[图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...
- 改动图片exif信息
我们先了解一下EXIF: EXIF能够附加于JPEG.TIFF.RIFF等文件之中.为其添加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本号信息. 全部的JPEG文件以字符串"0xF ...
- 图片Exif 信息中Orientation的理解和对此的处理
这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,但是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图.这样导致客户端用该宽高来展示图片会出现问题 ...
- 七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解
EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Ex ...
- 图片Exif信息
Exif文件格式简述链接:https://www.zhihu.com/question/23727439/answer/25467748 可交换图像文件常被简称为Exif(Exchangeable i ...
- Java读取图片exif信息实现图片方向自动纠正
起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...
随机推荐
- webrtc - web 应用相关网站
很有意思的网站 http://io13webrtc.appspot.com/#1 html5使用webrtc简介 http://www.html5rocks.com/en/tutorials/getu ...
- SlickGrid example 1: 最简单的例子和用法
SlickGrid例子和用法 开始学习使用SlickGrid,确实挺好用,挺方便的. 官网地址: https://github.com/mleibman/SlickGrid 不多说,先上效果图. 上代 ...
- 使用NPOI随意创建Excel(含下拉列表)
//创建工作簿 HSSFWorkbook ssfworkbook = new HSSFWorkbook(); //创建工作表(页) HSSFSheet sheet1 = ssfworkbook.Cre ...
- 【20160924】GOCVHelper MFC增强算法(2)
//创建或续写目录下的csv文件,填写“文件位置-分类”对 int writeCsv(const string& filename,const Vector<pair<st ...
- Poj(1511),SPFA
题目链接:http://poj.org/problem?id=1511 嗯,最后一次写SPFA了,以后就套模板了. 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返 ...
- git status message - Your branch is ahead of origin/master by X commits
git reset --hard origin/master git status FAQ: When I issue the "git status" command, I se ...
- HTTP 错误 404.2 - Not Found
前几天刚安装Windows Server 2008 r2 sp1 遇到问题之后,昨天我又遇到一个问题(但我不害怕有问题),提示: HTTP 错误 404.2 - Not Found由于 Web 服务器 ...
- CSU 1114 平方根大搜索 java大数
1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 49 Solved: 23[Submit][Status][Web Board ...
- HTML 5 Web Sockets应用初探
转载不错的http://developer.51cto.com/art/201008/217874.htm
- 2016年10月17日 星期一 --出埃及记 Exodus 19:1
2016年10月17日 星期一 --出埃及记 Exodus 19:1 In the third month after the Israelites left Egypt--on the very d ...