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);

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


你可能感兴趣的:(Android中利用Picasso实现图片压缩指定任意尺寸)