您的位置:首页 > 移动开发 > Android开发

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

2017-02-16 19:52 706 查看
之前做项目时,有个需求是指定照片压缩到任意宽高尺寸上传给服务器。当时我自己写了个图片压缩方法,但是不够完美,小问题不断(比如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);

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐