图片压缩

来源:互联网 发布:售票软件 编辑:程序博客网 时间:2024/05/25 18:11
package com.example.imageresizer;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ImageView;import com.example.imageresizer.utils.ImageResizer;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;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 btnResizerImage(View view){        loadImage("http://i3.s2.dpfile.com/2010-12-20/6201691_b.jpg(249x249)/thumb.jpg");    }    private void loadImage(String path){        new AsyncTask<String,Void,Bitmap>(){            @Override            protected void onPostExecute(Bitmap bitmap) {                super.onPostExecute(bitmap);                if(bitmap != null)                    ivIcon.setImageBitmap(bitmap);                else                    ivIcon.setImageResource(R.mipmap.ic_launcher);            }            @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.decodeStream(is);//ARGB_888 一个像素占 4个字节  ARGB_565 一个像素占 2 个字节  Alpha Red、Green、Blue(颜色)                        BitmapFactory.Options options = new BitmapFactory.Options();                        //在图片真正解析之前,不要解析图片数据,只需要告诉一下转换器,只要获取图片的像素(宽高)                        options.inJustDecodeBounds = true;//告诉BitmapFactory转换工厂不去真正解析图片只需要拿到图片宽高就行                        //假解析 API 有bug                        BitmapFactory.decodeStream(is,null,options);                        //压缩,根据图片采样率进行二次采样   100 * 100 是你所期望的具体图片尺寸                        //options.inSampleSize = 2; //采样用来计算图片的宽高(1920 * 1080 -> 1920 / 2 1080 / 2)                        *//*int inSampleSize = ImageResizer.caculateSampleSize(options,50,50);                        System.out.println("采样率 : "+inSampleSize);*//*                        options.inSampleSize = ImageResizer.caculateSampleSize(options,50,50);                        options.inJustDecodeBounds = false;                        //关闭之前的流                        is.close();                        //重新再去得到当前这张图片的字节流数据                        is= url.openStream();                        //开始解析图片                        Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);                        //关闭流                        is.close();*/                        // Bitmap bitmap = BitmapFactory.decodeStream(is);                        //Bitmap bitmap = ImageResizer.decodeStreamFromNetWork(url,is,50,50);                        return ImageResizer.decodeStreamFromNetWork(url,is,50,50);                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }        }.execute(path);    }}






package com.example.imageresizer.utils;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import java.io.InputStream;import java.net.URL;public class ImageResizer {    /**     *  计算图片的采样率     * @param options     * @param reqWidth  你所期望压缩的宽度     * @param reqHeight  你所期望压缩的高度     */    public static int caculateSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){        //得到这个图片的原始宽高        int width = options.outWidth;        int height = options.outHeight;        System.out.println("宽:"+width+"高 : "+height);        int inSampleSize = 1;        if(width > reqWidth || height > reqHeight){            int halfWidth = width / 2;            int halfHeight = height / 2;            while ((halfWidth / inSampleSize) >= reqWidth && (halfHeight / inSampleSize) >= reqHeight){                inSampleSize *= 2;            }        }        return inSampleSize;    }    /**     * 图片压缩彻底封装     * @param url     * @param is     * @param reqWidth     * @param reqHeight     * @return     * @throws Exception     */    public static Bitmap decodeStreamFromNetWork(URL url, InputStream is, int reqWidth, int reqHeight) throws Exception{        BitmapFactory.Options options = new BitmapFactory.Options();        //假解析        options.inJustDecodeBounds = true;        BitmapFactory.decodeStream(is,null,options);        //计算采样率        options.inSampleSize = caculateSampleSize(options,reqWidth,reqHeight);        //开始真正解析图片        options.inJustDecodeBounds = false;        //关闭流,避免decodeStream(1,2,3);bug        is.close();        InputStream inputStream = url.openStream();        return BitmapFactory.decodeStream(inputStream,null,options);    }}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头条误点了投放头条广告怎么办 交行网银密码错误6次怎么办 宁波新冮厦关门我们的消费卡怎么办 第一天上班别人教的学不会怎么办 老公出轨已经不想跟你爱爱了怎么办 妻子出轨丈夫为了孩子不离婚怎么办 妻子出轨分居死也不愿意离婚怎么办 拼多多个人卖家登录密码忘了怎么办 微信被限制添加更多订阅号了怎么办 知网复制粘贴的论文有格式怎么办 知网论文查询网站密码忘记了怎么办 开通了超级会员不能克隆好友怎么办 偷了家里好多钱去买手机了怎么办 中行信用卡短信邀请办白金卡怎么办 注册邮箱说邮箱地址已被注册怎么办 便利店开在小区里面没生意怎么办 微信支付密码忘了怎么办没银行卡 中行5月扣很多钱是怎么办 中银淘宝校园卡影响征信问题怎么办 中银E盾快到期了怎么办 京东e卡电子卡卡密泄漏怎么办 买错了京东e卡怎么办 京东购买手机激活后有问题怎么办 优购m9锁屏密码忘记了怎么办视频 中百仓储的购物卡过期了怎么办 武汉中百超市购物卡过期怎么办 已认证抵扣的发票发生退货怎么办 京东白条分期买手机额度不够怎么办 京东白条闪付手机不支持开通怎么办 拼多多不小心下两次单付款了怎么办 不小心给了京东快递差评怎么办 京东金融不小心卸载了怎么办 如果京东快递不小心完成订单怎么办 订机票时没有用常旅客卡怎么办 京东退货退款卖家已签收了怎么办 京东账号手机号换了密码忘了怎么办 qq飞车手游录像下载失败怎么办 手机知道qq号怎么破解密码怎么办 网上购物已付钱迟迟不发货怎么办 有人冒充微信头像和熟人借钱怎么办 微信红包输了50多万怎么办