1. 程式人生 > >Android中利用Picasso實現圖片壓縮指定任意尺寸

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

如果你覺得幫到了你,請給作者打賞一口飯吃: