imageloader+图片压缩

public class MainActivity extends AppCompatActivity {

    private ImageView ivIcon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        //找控件
        ivIcon = (ImageView) findViewById(R.id.ivIcon);


    }



    public void btnImageResizer(View view){


        //loadImage("http://tnfs.tngou.net/image/info/150822/d35a601b668c160a07c43d4925af9007.jpg");
        loadImage2("http://tnfs.tngou.net/image/info/150822/d35a601b668c160a07c43d4925af9007.jpg");

    }


    private void loadImage(String url){


        new AsyncTask<String,Void,Bitmap>(){


            @Override
            protected void onPostExecute(Bitmap bitmap) {
                super.onPostExecute(bitmap);
                //主线程
                if(bitmap != null){
                    ivIcon.setImageBitmap(bitmap);
                }else{
                    ivIcon.setBackgroundResource(R.mipmap.ic_launcher_round);
                }

            }

            @Override
            protected Bitmap doInBackground(String... params) {

                //子线程运行,可以执行耗时操作吧
                try {
                    String path = params[0];
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    //等待服务器响应
                    int code = connection.getResponseCode();

                    if(code == 200){

                        InputStream is = connection.getInputStream();

                        BitmapFactory.Options options = new BitmapFactory.Options();
                        //首先不要对图片进行真正解析,只需要假解析(只需要得到图片的宽高)
                        //inJustDecodeBounds = true BitmapFactory不会去真正解析这张图片的数据
                        //只会解析这张图片的宽高
                        options.inJustDecodeBounds = true;
                        //options 多个选项
                        BitmapFactory.decodeStream(is,null,options);

                        //得到图片宽高
                        int width = options.outWidth;
                        int height = options.outHeight;

                        //System.out.println("宽 : "+width+" 高 : "+height);

                        //定义变量记住采样率信息
                        int inSampleSize = 1;//1 默认不对图片进行任何的压缩

                        if(width > 100 || height > 100){

                            int halfWidth = width / 2;//640 / 2 = 320
                            int halfHeight = height / 2;


                            //计算采样率
                            while ((halfWidth / inSampleSize) >= 100 && (halfHeight / inSampleSize) >= 100){

                                inSampleSize *= 2;

                            }
                        }
                        //真正解析图片
                        options.inSampleSize = inSampleSize;
                        //inJustDecodeBounds = false 图片工厂会去对图片真正解析
                        options.inJustDecodeBounds = false;
                        //转换不出来图片的原因是系统方法Bug
                        //避免这个bug好的方法:将之前获取的图片流关闭
                        is.close();
                        //通过url对象重新得到图片流
                        is = url.openStream();
                        Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
                        //Bitmap bitmap = BitmapFactory.decodeStream(is);
                        is.close();
                        return bitmap;

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


                return null;
            }
        }.execute(url);
    }
原文地址:https://www.cnblogs.com/leshen/p/7364259.html