最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android下的EXIF是什么

 更新時間:2016年04月11日 15:44:37   作者:Hankkin  
這篇文章主要為大家詳細介紹了Android下的EXIF是什么,Exif(Exchangeable Image File 可交換圖像文件)是一種圖象文件格式,它的數(shù)據(jù)存儲與JPEG格式是完全相同的,想要深入了解的朋友可以參考一下

一.什么是Exif
Exif(Exchangeable Image File 可交換圖像文件)是一種圖象文件格式,它的數(shù)據(jù)存儲與JPEG格式是完全相同的。實際上Exif格式就是在JPEG格式頭部插入了數(shù)碼照片的信息,包括拍 攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄制的聲音以及全球定位系統(tǒng)(GPS)、縮略圖 等。簡單地說,Exif=JPEG+拍攝參數(shù)。因此,你可以利用任何可以查看JPEG文件的看圖軟件瀏覽Exif格式的照片,但并不是所有的圖形程序都能 處理 Exif信息。

所有的JPEG文件以字符串“0xFFD8”開頭,并以字符串“0xFFD9”結(jié)束。文件頭中有一系列“0xFF??”格式的字符串,稱為“標識”,用來 標記JPEG文件的信息段?!?xFFD8”表示圖像信息開始,“0xFFD9”表示圖像信息結(jié)束,這兩個標識后面沒有信息,而其它標識緊跟一些信息字 符。
  0xFFE0 -- 0xFFEF之間的標識符稱為“應用標記”,沒有被常規(guī)JPEG文件利用,Exif正是利用這些信息串記錄拍攝信息如快門速度、光圈值等,甚至可以包括全 球定位信息。按照Exif2.1標準對這些標識符的定義,數(shù)碼相機可以把各種拍攝信息記入數(shù)碼圖像中,應用軟件可以讀取這些數(shù)據(jù),再按照Exif2.1標 準,檢索出它們的具體含義,一般而言包括以下一些信息:
  Image Description 圖像描述、來源. 指生成圖像的工具
  Artist作者 有些相機可以輸入使用者的名字
  Make 生產(chǎn)者 指產(chǎn)品生產(chǎn)廠家
  Model 型號 指設備型號
  Orientation方向 有的相機支持,有的不支持
  XResolution/YResolution X/Y方向分辨率 本欄目已有專門條目解釋此問題。
  ResolutionUnit分辨率單位 一般為PPI
  Software軟件 顯示固件Firmware版本
  DateTime日期和時間
  YCbCrPositioning 色相定位
  ExifOffsetExif信息位置,定義Exif在信息在文件中的寫入,有些軟件不顯示。
  ExposureTime 曝光時間 即快門速度
  FNumber光圈系數(shù)
  ExposureProgram曝光程序 指程序式自動曝光的設置,各相機不同,可能是Sutter Priority(快門優(yōu)先)、Aperture Priority(快門優(yōu)先)等等。
  ISO speed ratings感光度
  ExifVersionExif版本
  DateTimeOriginal創(chuàng)建時間
  DateTimeDigitized數(shù)字化時間
  ComponentsConfiguration圖像構(gòu)造(多指色彩組合方案)
  CompressedBitsPerPixel(BPP)壓縮時每像素色彩位 指壓縮程度
  ExposureBiasValue曝光補償。
  MaxApertureValue最大光圈
  MeteringMode測光方式, 平均式測光、中央重點測光、點測光等。
  Lightsource光源 指白平衡設置
  Flash是否使用閃光燈。
  FocalLength焦距,一般顯示鏡頭物理焦距,有些軟件可以定義一個系數(shù),從而顯示相當于35mm相機的焦距 MakerNote(User Comment)作者標記、說明、記錄
  FlashPixVersionFlashPix版本 (個別機型支持)
  ColorSpace色域、色彩空間
  ExifImageWidth(Pixel X Dimension)圖像寬度 指橫向像素數(shù)
  ExifImageLength(Pixel Y Dimension)圖像高度 指縱向像素數(shù)
  Interoperability IFD通用性擴展項定義指針 和TIFF文件相關(guān),具體含義不詳
  FileSource源文件 Compression壓縮比。

二.Camera中拍照流程

在Android Camera程序開發(fā)過程中,要用到Exif相關(guān)的知識,如果處理不當,會導致拍攝的JPEG圖片無法正常瀏覽。
在Froyo(Android 2.2)源碼中的Camera應用是不對Exif信息進行寫操作,而只是讀操作,對于Exif的寫操作是交給Camera硬件抽象層去完成,這是 google的設計邏輯。但是不同的Android平臺及其相關(guān)子平臺,再加上不同的Camera應用,相互交替,排列組合,或許會出現(xiàn)這樣一種情況:底 層沒有去寫Exif,而上層應用也沒有寫Exif信息,那么圖片的顯示信息將會丟失。其中影響最為嚴重的是Orientation這個參數(shù)。

Froyo camera的邏輯是這樣的:
在Camera這個Activity中,有一個內(nèi)部類ImageCapture,其中包含一個重要的方法:

private void capture() {
// Set rotation.
mParameters.setRotation(mLastOrientation);
....................
.....................
 mCameraDevice.setParameters(mParameters);

mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback, mPostViewPictureCallback, new JpegPictureCallback(loc));
}

大致流程是這樣的:
1.將拍照時相機的方向添加進Camera.Parameters的實例中;
2.將全部相機拍照參數(shù)傳給android.hardware.Camera的對象;
3.調(diào)用方法takePicture,并設置好非常重要的4個callback;
4.生成Exif數(shù)據(jù)的事情就由HAL來完成;
5.第4個callback返回數(shù)據(jù)(這個callback是最重要的,而且是不可缺省的,也就是說前3個callback設置成Null也不會影響拍照功能),見如下代碼:

private final class JpegPictureCallback implements PictureCallback {
public void onPictureTaken(final byte[] jpegData, final android.hardware.Camera camera) {
//jpegData為JPEG數(shù)據(jù),是由HAL層根據(jù)應用傳輸?shù)母鞣N參數(shù)(即Camera.Parameters的實例)以及JPEG壓縮算法生成的。
mImageCapture.storeImage(jpegData, camera, mLocation);
}
}

三.Exif使用方法及代碼優(yōu)化方案

什么地方用到Exif信息呢?我遇到的至少有如下這么幾個地方:
1.生成右上角所略圖;
2.圖片顯示應用,例如android自帶的gallery3d應用;
3.圖片回顯;
4.短(彩)信等需要添加camera附件的應用.

看看源碼: ImageManager中是這樣讀取Exif方向參數(shù)的。

  public static int getExifOrientation(String filepath) {
    int degree = 0;
    ExifInterface exif = null;
    try {
      exif = new ExifInterface(filepath);
    } catch (IOException ex) {
      Log.e(TAG, "cannot read exif", ex);
    }
    if (exif != null) {
      int orientation = exif.getAttributeInt(
        ExifInterface.TAG_ORIENTATION, -1);
      if (orientation != -1) {
        // We only recognize a subset of orientation tag values.
        switch(orientation) {
          case ExifInterface.ORIENTATION_ROTATE_90:
            degree = 90;
            break;
          case ExifInterface.ORIENTATION_ROTATE_180:
            degree = 180;
            break;
          case ExifInterface.ORIENTATION_ROTATE_270:
            degree = 270;
            break;
        }

      }
    }
    return degree;
  }

這個方法可以進一步優(yōu)化,從而對于Exif信息的寫入不再依賴底層。那就是比較一下傳輸給底層的orientation與實際返回的是否相等,不相等就是底層寫入Exif信息出錯,我們就可以在應用層進行修正。
可以添加一個判斷分支如下:(其中EXIF_ORIENTATION是我們緩存的應用傳給底層的值)。

else if(orientation == 0 && EXIF_ORIENTATION != 0) {
        switch (EXIF_ORIENTATION) {
        case 90:
          orientation = ExifInterface.ORIENTATION_ROTATE_90;
          degree = 90;
          break;
        case 180:
          orientation = ExifInterface.ORIENTATION_ROTATE_180;
          degree = 180;
          break;
        case 270:
          orientation = ExifInterface.ORIENTATION_ROTATE_270;
          degree = 270;
          break;
        }
        exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(orientation));
        try {
          exif.saveAttributes();
        } catch (IOException e) {
           Log.e(TAG, "cannot save exif", e);
        }
      }

在應用層對于Exif的操作是通過android.media.ExifInterface接口完成的。
通過public void setAttribute (String tag, String value) 來設置,而獲取可以通過 public int getAttributeInt (String tag, int defaultValue) 和 public String getAttribute (String tag) 兩種方法都可以,getAttributeInt 重載方法一第二個參數(shù)為我們設置的默認值,如果成功則返回相應Tag的值;特定的整數(shù)內(nèi)容為該方法直接返回值。而重載方法二該方法直接返回結(jié)果,如果失敗則為null。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關(guān)文章

  • android使用ViewPager組件實現(xiàn)app引導查看頁面

    android使用ViewPager組件實現(xiàn)app引導查看頁面

    這篇文章主要為大家詳細介紹了android使用ViewPager組件實現(xiàn)app引導查看頁面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android實現(xiàn)氣泡動畫

    Android實現(xiàn)氣泡動畫

    這篇文章主要為大家詳細介紹了Android實現(xiàn)氣泡動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • android中soap協(xié)議使用(ksoap調(diào)用webservice)

    android中soap協(xié)議使用(ksoap調(diào)用webservice)

    kSOAP是如何調(diào)用ebservice的呢,首先要使用SoapObject,這是一個高度抽象化的類,完成SOAP調(diào)用??梢哉{(diào)用它的addProperty方法填寫要調(diào)用的webservice方法的參數(shù)
    2014-02-02
  • Android 安全加密:數(shù)字簽名和數(shù)字證書詳解

    Android 安全加密:數(shù)字簽名和數(shù)字證書詳解

    本文主要介紹Android 安全加密數(shù)字簽名和數(shù)字證書的資料,這里整理詳細的資料及數(shù)字簽名和數(shù)字證書應用詳解,有需要的小伙伴可以參考下
    2016-09-09
  • Android仿微信發(fā)朋友圈瀏覽圖片效果

    Android仿微信發(fā)朋友圈瀏覽圖片效果

    這篇文章主要介紹了Android仿微信發(fā)朋友圈瀏覽圖片效果的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android 8.0系統(tǒng)中通知欄的適配詳解

    Android 8.0系統(tǒng)中通知欄的適配詳解

    本片文章給大家通過實例講解分析了Android 8.0系統(tǒng)中通知欄的相關(guān)知識點,對此有需要的朋友可以參考學習下。
    2018-04-04
  • Android獲取wifi列表的方法

    Android獲取wifi列表的方法

    這篇文章主要為大家詳細介紹了Android獲取wifi列表的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android注冊登錄實時自動獲取短信驗證碼

    Android注冊登錄實時自動獲取短信驗證碼

    注冊登錄或修改密碼功能常常需要輸入短信驗證碼,如何自動獲取短信驗證碼,這篇文章就為大家介紹了Androidcv注冊登錄自動獲取短信驗證碼的實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android 多種簡單的彈出框樣式設置代碼

    Android 多種簡單的彈出框樣式設置代碼

    這篇文章主要介紹了Android 多種簡單的彈出框樣式設置代碼的相關(guān)資料,這是一個基于AlertDialog和Dialog這兩個類封裝的多種彈出框樣式,其中提供各種簡單樣式的彈出框使用說明。對android彈出框樣式感興趣的朋友一起看看吧
    2016-11-11
  • Android FaceDetector實現(xiàn)人臉檢測功能

    Android FaceDetector實現(xiàn)人臉檢測功能

    這篇文章主要為大家詳細介紹了Android FaceDetector實現(xiàn)人臉檢測功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

浏阳市| 灵山县| 宁阳县| 惠安县| 翁牛特旗| 万年县| 孟村| 措勤县| 宕昌县| 阜平县| 广河县| 丰顺县| 图木舒克市| 独山县| 锡林郭勒盟| 南城县| 门头沟区| 泽普县| 都江堰市| 大洼县| 阜新市| 石林| 延安市| 深泽县| 洛隆县| 年辖:市辖区| 河源市| 敖汉旗| 青海省| 丰县| 渭南市| 收藏| 友谊县| 兴隆县| 额尔古纳市| 井研县| 蒙自县| 建阳市| 西贡区| 安新县| 永胜县|