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