當前位置:首頁 » 安卓系統 » androidexif

androidexif

發布時間: 2023-01-03 14:46:19

⑴ 請問:Android中怎麼獲取到圖片屬性上的地點信息,地點信息對應exif中key是什麼

地點的TAG就是經緯度信息

TAG_GPS_LATITUDE 緯度
TAG_GPS_LATITUDE_REF 緯度參考
TAG_GPS_LONGITUDE 經度
TAG_GPS_LONGITUDE_REF 經度參考

找個經緯度轉換工具轉成地址就好了(雖然沒試過,但Android自帶的geocoder恐怕是不行的,需要google的網路服務,而google的網路服務在大陸嘛……你懂的)

⑵ 如何解決Android三星手機從圖庫選擇照片旋轉問題

最近解決了一個令我頭疼好久的問題,就是三星手機拍照圖片旋轉的問題,項目中有上傳圖片的功能,那麼涉及到拍照,從相冊中選擇圖片,別的'手機都ok沒有問題,唯獨三星的手機拍照之後,你會很清楚的看到會把照片旋轉一下,然後你根據路徑找到的圖片就是已經被旋轉的了,解決辦法終於被我找到了。我們可以根據圖片的路徑讀取照片exif(Exchangeable Image File 可交換圖像文件)信息中的旋轉角度,至於這個EXIF可以看一下大牛的文章

Android 下的EXIF

根據調試,可以清楚的發現三星手機拍照的圖片的旋轉角度是90度,而別的手機旋轉角度是0度

看一下代碼:

/** * 讀取照片exif信息中的旋轉角度 * @param path 照片路徑 * @return角度 */ public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 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; } } catch (IOException e) { e.printStackTrace(); } return degree; }

那麼我們只需要根據旋轉角度將圖片旋轉過來就OK了

public static Bitmap toturn(Bitmap img){ Matrix matrix = new Matrix(); matrix.postRotate(+90); /*翻轉90度*/ int width = img.getWidth(); int height =img.getHeight(); img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); return img; }

輕松解決了,是不是很完美?

以上就是本文的全部內容,希望大家喜歡。

⑶ Android開發 camera拍照無法獲取Exit信息

private void data2file(byte[] w, String fileName) throws Exception {
FileOutputStream out = null;
try {

out = new FileOutputStream(fileName);
Bitmap bitmap = BitmapFactory.decodeByteArray(w, 0, w.length);
Matrix matrix=new Matrix();
matrix.postScale(1f, 1f);

//旋轉圖片
int deg = this.getWindowManager().getDefaultDisplay().getRotation();
if (deg == Surface.ROTATION_270) {
degree = 180;
matrix.postRotate(degree);
}

Bitmap dstbmp=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),
bitmap.getHeight(),matrix,true);

dstbmp.compress(CompressFormat.JPEG, 100, out);
//out.write(w);
out.flush();
out.close();
dstbmp.recycle();
bitmap.recycle();

} catch (Exception e) {
if (out != null)
out.close();
throw e;
}
}

生成圖片地址後可以做這樣處理,先旋轉到合適的角度,再保存。

⑷ 如何附加EXIF元數據在Android的序列化的Bitmap

例如:public static void main(String[] args) throws IOException{ List<Date> list=new ArrayList<Date>(); Date now=new Date(); list.add(now); list.add(new Date(now.getTime()+8888888)); ByteArrayOutputStream byteStream=new ByteArrayOutputStream(); ObjectOutput output=new ObjectOutputStream(byteStream); output.writeObject(list); byte b[]=byteStream.toByteArray(); BASE64Encoder base64Encoder=new BASE64Encoder(); String cookieString=base64Encoder.encode(b); System.out.println("經過BASE64編碼的Cookie:\n"+cookieString); System.out.println("\n開始解碼"); BASE64Decoder base64Decoder=new BASE64Decoder(); byte buf[]=base64Decoder.decodeBuffer(cookieString); ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(buf); ObjectInput input=new ObjectInputStream(byteArrayInputStream); List<Date> afterList=(List<Date>) input.readObject(); for (Date date : afterList) { System.out.println(date); } }
補充:Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。

⑸ 如何附加EXIF元數據在Android的序列化的Bitmap

ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos); //Bitmap object is your image
byte[] data = bos.toByteArray();

TiffOutputSet outputSet = null;

IImageMetadata metadata = Sanselan.getMetadata(new File(filepath)); // filepath is the path to your image file stored in SD card (which contains exif info)
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata)
{
TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif)
{
outputSet = exif.getOutputSet();
}
}
if (null != outputSet)
{
bos.flush();
bos.close();
bos = new ByteArrayOutputStream();
ExifRewriter ER = new ExifRewriter();
ER.updateExifMetadataLossless(data, bos, outputSet);
data = bos.toByteArray(); //Update you Byte array, Now it contains exif information!
}

⑹ Android 開發中從相冊讀取的照片有時侯的方向不對,本來是豎屏的照片變成橫屏了怎麼辦

可以讀取相片的方向值,然後旋轉
讀取方向值請參照下面的代碼:
ExifInterface exifInterface = new ExifInterface(bitmapUrl);
int tag = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
然後旋轉:
int degree = 0;
if (orc == ExifInterface.ORIENTATION_ROTATE_90) {
degree = 90;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_180) {
degree = 180;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_270) {
degree = 270;
}
if (degrees != 0 && bitmap != null) {
Matrix m = new Matrix();
m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
}

⑺ Android 系統原生相機API角度原理與適配

雖然Camera作為第一代原生android所提供的相機類一直被開發者甚至Google官方開發人員所詬病,但為了兼容和適配Android版本5.0以下的App應用,我們別無選擇。因此,有了本篇文檔詳細闡述1.0版的Camera 是如何使用的。本篇使用的是SurfaceView與Camera類。

文檔下文會在拍照流程中的不同的階段應用到上述四個角度,而「終端自然方向」貫穿整個流程當中。這一個方向、四個角度非常重要,缺一不可,是支撐相機Camera 系列API的關鍵。在設計NXDesign的相機項目中,經過對官方文檔的研讀和各路資料的調研之後發現,我們在網路上查到的博客類相關資料有80%的實現方式是存在問題的,當然,這也可以歸咎於該API其本身確實不好用,如果不對源碼注釋進行仔細研究,很容易對開發者產生誤導。

更加准確的說,相機的生命周期是依託於SurfaceView的創建和銷毀來完成的。SurfaceView的作用是提供相機內容的實時預覽。我們需要在surfaceview創建好之後打開相機使用相機資源,在surfaceview被銷毀後釋放相機資源。

surfaceview 提供了holder機制向調用方通知surfaceview的變化時機,為了在不同的時機對相機資源做不同的事情,需要調用SurfaceHolder.addCallback()方法。

現在的Android手機一般會有多個攝像頭,但根據其方向可以歸為兩類: CAMERA_FACING_BACK 和 CAMERA_FACING_FRONT 。在打開攝像頭之前,首先需要獲取相機資源,判斷相機個數 Camera.getNumberOfCameras() 。每個相機對應一個CameraInfo,它的定義如下:

這里涉及到一個重要概念:相機圖像感測器(camera sensor),想要理解上述注釋的含義,就需要先理解下圖內容。

左圖是通常情況下,我們對view的x y方向的認知,以屏幕的左上角為原點向右為x正方向,向下為y正方向;但是,右圖描述的是絕大多數情況下, 相機圖像感測器 的起始位置和方向判定。與view不同的是,感測器以手機屏幕在自然方向上的右上角為原點,向下為x正方向,向左為y正方向。因此,我們理解上述注釋就不難了。如果相機自帶的感測器頂部與終端自然方向(手機屏幕的硬體方向,一般手機都是豎直方向,也就是文檔中說的naturally tall screen)的右邊緣一致,則這個值就是90度。如果前置攝像頭感測器的頂部與手機自然方向一致,則這個值就是270度。

當我們定義startCamera()方法時,要做5件事情,1.遍歷攝像頭cameraId,找到想要打開的攝像頭(前置還是後置);2.獲取攝像頭信息,主要獲取orientation;3. 設置相機DisplayOrientation 4.設置相機參數,主要是寬高比、對焦模式、圖片格式、setRotation等。5. 向camera設置surfaceview.viewholder,並且startPreview。主要邏輯如下:

拿到cameraInfo.orientation之後,要調用camera.setDisplayOrientation設置進去,保證通過surfaceview預覽到的取景跟當前的手機方向保持一致,但是,setDisplayOrientation設置的其實是經過兩個角度計算之後的復合角度,而並不單純是cameraInfo.orientation。正確的做法是這樣的:先獲取手機屏幕的旋轉方向,然後與cameraInfo.orientation加和得到最終角度。通常情況下,如果我們設置相機為portrait,則不用考慮rotation。這也是為什麼絕大部分網路資料中都會粗暴的寫入一個90度完事兒而並沒有解釋這么做的道理。

調用camera.takePicture(null, null, pictureCallback)

這里需要做的僅僅是將callback中返回的data存儲為File。需要注意的是,data中會包含setRotation()方法中的角度信息,因此如果直接使用Bitmap工具類生成bitmap,再進行存儲或者展示,生成出來的圖像其實是缺失了旋轉角度的原始方向,這十有八九會發生圖像展示角度錯誤的情況。因此,需要直接保存,再通過Exif工具類讀取File中的角度信息(當然Exif工具類就是為了讀取File中的各種信息而生的,比如拍照時間、經緯度等等)。

基於Camera API,
surfaceview的預覽需要setDisplayOrientation(),入參角度與CameraInfo.orientation(感測器偏角)和WindowManager.default.displayOrientation(屏幕旋轉角度)兩個角度有關。
相機拍照前需要setRotation(),入參角度與CameraInfo.orientation(感測器偏角)和OrientationEventListener返回的orientation(終端自然角度偏角)有關,二者的換算結果就是圖像寫入偏角,該偏角意味著圖像被順時針旋轉該角度就能夠回正展示。

⑻ 手機上怎麼查看圖片的exif信息,尤其是圖片GPS信息。。(安卓手機

開了定位的才有gps
沒GPS功能的就沒那個信息

⑼ 智能手機(IOS,Android)通過瀏覽器上傳圖片 丟失exif等圖片信息

你說的那種上傳是要經過壓縮處理這一過程的!所以exif信息會被抹掉以節省數據量!
你的意思是不是想恢復exif? 我可以用編程演算法給你恢復出來!圖傳我

⑽ android開發,各位大神能幫我看看這個空指針異常是怎麼回事么

153行有個對象是null的。

熱點內容
把什麼塗在密碼鎖上能看到密碼 發布:2025-04-23 04:29:40 瀏覽:242
sql2000密碼忘記 發布:2025-04-23 04:22:03 瀏覽:21
安卓手機退出應用怎麼絲滑 發布:2025-04-23 04:17:46 瀏覽:107
小米全盤加密 發布:2025-04-23 04:14:24 瀏覽:741
pac腳本代理伺服器地址 發布:2025-04-23 04:08:44 瀏覽:954
5g編程 發布:2025-04-23 03:59:14 瀏覽:293
kafka源碼分析 發布:2025-04-23 03:57:41 瀏覽:16
企鵝存儲罐 發布:2025-04-23 03:57:00 瀏覽:437
掛機怎樣做腳本 發布:2025-04-23 03:45:33 瀏覽:534
康海串口伺服器ip設置 發布:2025-04-23 03:44:36 瀏覽:336