Android網絡圖片轉換成File文件

項目中需求是這樣子的,接口獲取一些我的信息列表,列表中包含中多張圖片,點擊修改要把查詢出來的圖片和後期添加的圖片一道上傳到服務器。服務器

思路:網絡圖片路徑---->下載到本地(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

相關文章
相關標籤/搜索