項目中需求是這樣子的,接口獲取一些我的信息列表,列表中包含中多張圖片,點擊修改要把查詢出來的圖片和後期添加的圖片一道上傳到服務器。服務器
思路:網絡圖片路徑---->下載到本地(bitmap)-->轉換爲本地File文件網絡
1.下載本地ide
/** * 網絡圖片uri轉bitmap * Created by iningke on 2017/2/8. */ public class ToImg3 { public final static Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); HttpURLConnection conn; conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); int length = conn.getContentLength(); conn.connect(); InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is, length); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize =2; // 設置縮放比例 Rect rect = new Rect(0, 0,0,0); bitmap = BitmapFactory.decodeStream(bis,rect,options); } catch (IOException e) { e.printStackTrace(); } return bitmap; } }
2.轉換文件url
public class ToImg4 { /** * 將Bitmap轉換成文件 * 保存文件 * @param bm * @param fileName * @throws IOException */ public static File saveFile(Bitmap bm, String fileName) throws IOException { String path = getSDPath() +"/wuliu/"; File dirFile = new File(path); if(!dirFile.exists()){ dirFile.mkdir(); } File myCaptureFile = new File(path + fileName); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); return myCaptureFile; } //獲取sd卡路徑 public static String getSDPath(){ File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED);//判斷sd卡是否存在 if(sdCardExist) { sdDir = Environment.getExternalStorageDirectory();//獲取跟目錄 } return sdDir.toString(); } }
調用方法code
thread = new Thread(new Runnable() { @Override public void run() { try { Bitmap bitmap = ToImg3.returnBitMap(path); String imageName = System.currentTimeMillis()+".png"; File file = ToImg4.saveFile(bitmap, imageName); Log.e("download",file+""); } catch (IOException e) { e.printStackTrace(); } } }); thread.start();
大概這樣子,耗內存不會太大,在40-60之間orm