Bitmap进行压缩处理和圆形处理

第一步:写一个工具类

public class BitmapUtils {

    public static Bitmap circleBitmap(Bitmap source) {
        //获取Bitmap的宽度
        int width = source.getWidth();
        //以Bitmap的宽度值作为新的bitmap的宽高值。
        Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        //以此bitmap为基准,创建一个矩形画布
        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        //在画布上画一个圆
        canvas.drawCircle(width / 2, width / 2, width / 2, paint);
        //设置图片相交情况下的处理方式
        //setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有:
        //PorterDuff.Mode.SRC_IN 取两层图像交集部分,只显示上层图像
        //PorterDuff.Mode.DST_IN 取两层图像交集部分,只显示下层图像
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        //在画布上绘制bitmap
        canvas.drawBitmap(source, 0, 0, paint);
        return bitmap;
    }

    //实现图片的压缩处理
    //设置宽高必须使用浮点型,否则导致压缩的比例:0
    public static Bitmap zoom(Bitmap sorce, float width, float heigth) {
        Matrix matrix = new Matrix();
        //图片压缩处理
        matrix.postScale(width / sorce.getWidth(), heigth / sorce.getHeight());
        Bitmap bitmap = Bitmap.createBitmap(sorce, 0, 0, sorce.getWidth(), sorce.getHeight(), matrix, false);
        return bitmap;
    }
}
第二步:利用Picasso插件显示图片

String url = "http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/01.jpg";
Picasso.with(getContext()).load(url).transform(new Transformation() {
    @Override
    public Bitmap transform(Bitmap source) {
        //压缩处理
        Bitmap bitmap = BitmapUtils.zoom(source, UIUtils.dp2px(62),UIUtils.dp2px(62));
        //圆形处理
        bitmap = BitmapUtils.circleBitmap(bitmap);
        source.recycle();
        return bitmap;
    }

    @Override
    public String key() {
        return "";//需要保证返回值不能为null。否则报错
    }
}).into(ivMeIcon);

效果图:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值