2016-09-17 49 views
1

鑑於圖像Uri,我需要將圖像保存到我的應用程序的緩存目錄。我使用InputStreamUri中提取bitmap,因爲Uri可能來自MediaStore或其他應用的內容Uri(例如Google相冊),並且在所有情況下都無法安全地導出filePath。手動從流中提取EXIF並將其附加到JPEG文件

由於沒有在android系統Marshmallow來讀取InputStreamFileDescriptorEXIF及以下,我使用this庫,它有一個構造函數的Exif爲InputStream方法。

我想要的是,當我從Uri提取bitmap並將其寫入到一個JPEG文件在我的緩存目錄,我想縫合所有EXIF數據我從InputStream一到這個JPEG文件,因爲某些業務要求(主要是旋轉和經緯度)。

我無法弄清楚使用上述庫的正確方法(不是很精通EXIF)。任何幫助將不勝感激。

回答

1

對於這類問題,這不是正確的方法。這個流已經是一個JPG格式,所有的EXIF數據都會被放入它。您只需將流直接複製到應用程序緩存。

類似的東西:

// in is the inputstream that you got from the Uri 
// dst is a file to your app internal cache 
public void copy(Uri uri, File dst) throws IOException { 
    InputStream in = contentResolver.openInputStream(uri); 
    OutputStream out = new FileOutputStream(dst); 

    // Transfer bytes from in to out 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    in.close(); 
    out.close(); 
} 

這個執行後,原來的JPG的副本保存在您的應用程序的本地緩存,包括它的所有EXIF。之後,如果你想要一個位圖(在屏幕上顯示,應用效果,或其他),然後你從你的JPG副本加載位圖。

相關問題