Android中利用Picasso实现图片压缩指定任意尺寸

之前做项目时,有个需求是指定照片压缩到任意宽高尺寸上传给服务器。当时我自己写了个图片压缩方法,但是不够完美,小问题不断(比如OOM之类的)。后来看到了神器Picasso不光能加载网络图片,还能以任意尺寸加载本地图片。于是我想,既然Picasso能任意尺寸加载本地图片,那它肯定能任意宽高尺寸压缩图片了。仔细找了下,找到了对应的方法,我刚才测试了一下,发现确实可以满足我的需求,而且图片质量还很不错。在这里特此记录一下。

Picasso的github地址:https://github.com/square/picasso

代码如下:
(其中一定要万分注意,Target 不能直接new 出来,要像我下面一样声明为成员变量。因为Picasso 里面持有Target 用的是弱引用,你要是直接new 就有很大可能被GC回收导致接收不到回调。我快被坑哭了)

    private Target target = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            ImageView imageView = (ImageView) findViewById(R.id.image);
            imageView.setImageBitmap(bitmap);
            Log.v("tag_2","bitmap.getHeight() = " + bitmap.getHeight());
            Log.v("tag_2","bitmap.getWidth() = " + bitmap.getWidth());
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
        }
    };
Picasso.with(MainActivity.this).load(uri).resize(806,902).centerCrop().into(target);
如果传图片地址:
Picasso.with(MainActivity.this).load(new File(path)).resize(806,902).centerCrop().into(target);


然后把回调里面的bitmap保存到本地就是我想要的结果了。

===============================

2017年2月18日补充:Android中指定任意宽高值,压缩Bitmap的原生API是这个:

Bitmap bm = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(path), 502, 302, true);

如果你觉得帮到了你,请给作者打赏一口饭吃:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值