项目中需求是这样子的,接口获取一些个人信息列表,列表中包含中多张图片,点击修改要把查询出来的图片和后期添加的图片一道上传到服务器。
思路:网络图片路径---->下载到本地(bitmap)-->转换为本地File文件
1.下载本地
/** * 网络图片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.转换文件
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(); }}
调用方法
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之间