Android网络图片转换成File文件

原创
2017/02/16 17:27
阅读数 1W

项目中需求是这样子的,接口获取一些个人信息列表,列表中包含中多张图片,点击修改要把查询出来的图片和后期添加的图片一道上传到服务器。

思路:网络图片路径---->下载到本地(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之间

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部