(四十三)获取图片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();
        }

    }

}
时间: 2024-10-12 19:40:51

(四十三)获取图片exif信息的相关文章

Android 获取图片exif信息

使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_p

Android 图片Exif信息相关的获取与修改

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

python用来获得图片exif信息的库源码

将开发过程中重要的内容段收藏起来,下边内容是关于python用来获得图片exif信息的库的内容. # library test/debug function (dump given files)if __name__ == '__main__': import sys import getopt # parse command line options/arguments try: opts, args = getopt.getopt(sys.argv[1:], "hqsdt:v",

图片Exif信息

Exif文件格式简述链接:https://www.zhihu.com/question/23727439/answer/25467748 可交换图像文件常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据. Exif最初由日本电子工业发展协会在1996年制定,版本为1.0.1998年,升级到2.1,增加了对音频文件的支持.2002年3月,发表了2.2版. Exif可以附加于JPEG.TIFF.RIF

图片Exif 信息中Orientation的理解和对此的处理

这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,但是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图.这样导致客户端用该宽高来展示图片会出现问题. 下面有个例子,可以参考: 1,图片地址是:http://7xt44n.com2.z0.glb.qiniucdn.com/exif.png 打开可以看到是竖图. 2,用七牛的api将所有额外信息去除,再看来这张图片:http://7xt44n.com2.z0.glb.qiniucdn.com/ex

改动图片exif信息

我们先了解一下EXIF: EXIF能够附加于JPEG.TIFF.RIFF等文件之中.为其添加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本号信息. 全部的JPEG文件以字符串"0xFFD8"开头.并以字符串"0xFFD9"结束. 文件头中有一系列"0xFF?? "格式的字符串,称为"标识",用来标记JPEG文件的信息段."0xFFD8"表示图像信息開始."0xFFD9"表示图像信

七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解

EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Exif 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是 EXIF 信息是不支持 png,webp 等图片格式的. 对于七牛,可以在图片后面加? exif 参数来获取图片的 exif 信息. 对于 Orientation 参数,简单的说是记录图片拍摄的相机的旋转信息,浏览器

修改图片exif信息

我们先了解一下EXIF: EXIF可以附加于JPEG.TIFF.RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息. 所有的JPEG文件以字符串"0xFFD8"开头,并以字符串"0xFFD9"结束.文件头中有一系列"0xFF??"格式的字符串,称为"标识",用来标记JPEG文件的信息段."0xFFD8"表示图像信息开始,"0xFFD9"表示图像信息结束

SpringCloud : 接入 微信公众号平台(四)、获取微信用户信息接口

代码参考: import com.phpdragon.wechat.proxy.config.WeChatConfig; import com.phpdragon.wechat.proxy.dto.mp.user.GetOauthUserInfoDto; import com.phpdragon.wechat.proxy.dto.mp.user.GetOpenidDto; import com.phpdragon.wechat.proxy.dto.mp.user.GetUserInfoDto;