Android图片压缩算法

1获取手机存储图片,默认一个像素占4个字节

 System.out.println("手机存储路径----------》:"+Environment.getExternalStorageDirectory());
        String path= Environment.getExternalStorageDirectory()+"/JDIM/smiley/test2.jpg";
        Bitmap bitmap= BitmapFactory.decodeFile(path);
        System.out.println("图片大小:"+bitmap.getByteCount()+"字节");
        System.out.println("图片大小:"+bitmap.getByteCount()/1024/1024+"M");
        System.out.println("图片宽高:"+bitmap.getWidth()+"像素"+"  "+bitmap.getHeight()+"像素");
        //默认1个像素占4个字节
        System.out.println("图片单行字节数:"+bitmap.getRowBytes());
        mImgv.setImageBitmap(bitmap);

Environment.getExternalStorageDirectory()获取的路径是:
/storage/emulated/0
输出结果

08-17 14:03:47.144 18535-18535/com.example.picturedemo I/System.out: 图片大小:51916800字节
08-17 14:03:47.144 18535-18535/com.example.picturedemo I/System.out: 图片大小:49M
08-17 14:03:47.144 18535-18535/com.example.picturedemo I/System.out: 图片宽高:3120像素  4160像素
08-17 14:03:47.144 18535-18535/com.example.picturedemo I/System.out: 图片单行字节数:12480

2图片压缩算法

//压缩算法
        int maxWidth=960;
        int maxHeight=1280;  
        //图片内存压缩
        BitmapFactory.Options options=new BitmapFactory.Options();
        String path= Environment.getExternalStorageDirectory()+"/JDIM/smiley/test2.jpg";
        //控制我们每个像素占有的字节数
//        options.inPreferredConfig= Bitmap.Config.ARGB_8888;
        //获取宽高---不加载Bitmap对象  
        //inJustDecodeBounds=true---只加载Bitmap的边,而不加载实际数据
        options.inJustDecodeBounds=true;

        Bitmap bitmap= BitmapFactory.decodeFile(path,options);
        System.out.println("加载回来的东西:  "+bitmap);
        System.out.println("宽高:"+options.outWidth+"  "+options.outHeight);

        //运算缩放比例
        int scaleNum=1;
        while(options.outWidth/scaleNum>maxWidth ||options.outHeight/scaleNum>maxHeight){
            scaleNum*=2;
        }
        System.out.println("运算后的缩放倍数   "+scaleNum);
        //设置加载图片时的压缩比例
        //此处缩放比例,如果该值是2的整数次幂,则直接取值,如果不是,则向下取最近的一个2的整数次幂
        options.inSampleSize=scaleNum;
        options.inJustDecodeBounds=false;
        Bitmap bitmapnew= BitmapFactory.decodeFile(path,options);
        System.out.println("新的:----》");
        System.out.println("图片大小:"+bitmapnew.getByteCount()+"字节");
        System.out.println("图片大小:"+bitmapnew.getByteCount()/1024/1024+"M");
        System.out.println("图片宽高:"+bitmapnew.getWidth()+"  "+bitmapnew.getHeight());
        mImgv.setImageBitmap(bitmapnew);

输出结果:

08-17 14:04:13.852 18535-18535/com.example.picturedemo I/System.out: 加载回来的东西:  null
08-17 14:04:13.853 18535-18535/com.example.picturedemo I/System.out: 宽高:3120  4160
08-17 14:04:13.853 18535-18535/com.example.picturedemo I/System.out: 运算后的缩放倍数   4
08-17 14:04:13.854 18535-18535/com.example.picturedemo D/skia: jpeg_decoder mode 1, colorType 4, w 3120, h 4160, sample 4, bsLength 0!!
08-17 14:04:14.047 18535-18535/com.example.picturedemo D/skia: jpeg_decoder finish successfully, L:1917!!!
08-17 14:04:14.048 18535-18535/com.example.picturedemo I/System.out: 新的:----》
08-17 14:04:14.048 18535-18535/com.example.picturedemo I/System.out: 图片大小:3244800
08-17 14:04:14.049 18535-18535/com.example.picturedemo I/System.out: 图片宽高:780  1040
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值