2013-04-11 91 views
3

我有一些圖像顯示在應用程序中(當用戶從​​中選擇圖像時,如從圖庫中選取)。android: - 如何將圖像從資產複製到SD卡?

問題是如何將代碼中的資產 文件夾中的圖像複製到SD卡上的文件夾中。

+0

我試圖圖像直接把SD卡,但它不work.Then使用此http://計算器.com/questions/12173468/copy-images-from-assest-to-sd-card-on-install-android-application – noviceAndroid 2013-04-11 08:01:42

+0

and it did,what? – njzk2 2013-04-11 09:53:30

回答

3
AssetManager assetManager = context.getAssets(); 
InputStream is = assetManager.open(fileName); 

獲取AssetManager和呼叫open與文件我想要複製爲參數。 然後你可以用這種方式

File out = new File(Environment.getExternalStorageDirectory(), fileName); 
byte[] buffer = new byte[BUFFER_LEN]; 
FileOutputStream fos = new FileOutputStream(out); 
int read = 0; 

while ((read = is.read(buffer, 0, BUFFER_LEN)) >= 0) { 
     fos.write(buffer, 0, read); 
    } 

fos.flush(); 
fos.close() 
is.close() 

記得添加WRITE_EXTERNAL_STORAGE許可,您AndroidManifest.xml文件

+0

謝謝你的回答,這將用於指定的文件,但在我的項目中有圖像(不是一個圖像)。 – noviceAndroid 2013-04-11 08:30:08

+0

它看起來像Environment.getExternalStorageDirectory是一種方法,而不是公共成員,所以它應該是Environment.getExternalStorageDirectory()(帶括號) – Grimmy 2014-02-13 14:54:30

+0

當然是。這是一個錯字。感謝您指出@Grimmy – Blackbelt 2014-02-13 14:55:37

0
  • 獲得使用多種方法之一位圖資源簡單地複製。

例:

Bitmap bitmap = BitmapFactory.decodeResource(resource, id); // get your bitmap that you want to save on SD card. 
  • 獲取存儲資源的路徑。

String compressedFilePath = Environment.getExternalStorageDirectory() + File.separator + "FOLDERNAME" + File.separator + "FILENAME.jpg";

  • 保存使用壓縮方法。 (快捷方式來保存圖像爲每docs

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(pathToStore))); // use 100 to make sure image quality is not reduced(Read the docs)

注意:您需要寫(並可能在將來被讀取)訪問寫入SD卡。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

所以基本上你正在採取一個壓縮的圖像,解壓縮它,然後再壓縮在SD卡上。是不是更簡單,像複製它? – njzk2 2013-04-11 09:54:18

+0

不完全。拍攝圖像時,調用壓縮方法,如果壓縮值設置爲100,則只是返回相同的圖像。它是將圖像保存到任何位置的簡單方法。沒有壓縮也沒有減壓。 – 2013-04-11 10:18:33

+0

是的,有。即使壓縮是無損的,jpeg也會被壓縮。你正在創建一個jpeg(或其他)的位圖,然後解壓縮它,然後創建一個新的jpeg文件,這是一個壓縮文件。 – njzk2 2013-04-11 11:40:52

2
private void copyFileAssets() { 
     AssetManager assetManager = getAssets();    
     InputStream in = null; 
     OutputStream out = null; 
     try { 
      in = assetManager.open("ceo.jpg"); 
      out = new FileOutputStream(Environment.getExternalStorageDirectory()+File.separator+ "abc.jpg"); 
      copyFile(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch(IOException e) { 
      Log.e("tag", "Failed to copy asset file: " + filename, e); 
     }  

} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 

你必須添加此權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />