Android 图片压缩,图片保存,bitmap,图片框架压缩

Android 图片压缩,图片保存,bitmap,图片框架压缩:

项目中经常会用到图片上传等,但是由于图片很大,需要压缩之后再进行相关处理

例如:拍照之后的图片需要上传到后端,后端进行保存,显示


自己手写图片压缩方法类:BitmapUtils

优点:对于编程能力有所提升,对源码有所了解 缺点:写的代码效率较低,压缩效果没有框架压缩效果好,比较费时

新建类:
在这里插入图片描述
接下来

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class BitmapUtils {
    /**
     * 质量压缩方法
     * @param beforeBitmap 压缩前的图片bitmap
     * @return 压缩图片的bitmap
     */
    public static Bitmap compressImage(Bitmap beforeBitmap) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if (beforeBitmap != null) {
            beforeBitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
            int options = 100;
            while (bos.toByteArray().length / 1024 > 500) {
                bos.reset();
                beforeBitmap.compress(Bitmap.CompressFormat.PNG, options, bos);
                options -= 10;
            }
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            Bitmap afterBitmap = BitmapFactory.decodeStream(bis);
            return afterBitmap;
        }
        return null;
    }
    static void saveBitmap(String path, Bitmap bm) {
        File saveFile = new File(path);
        try {
            FileOutputStream saveImgOut = new FileOutputStream(saveFile);
            bm.compress(Bitmap.CompressFormat.PNG, 90, saveImgOut);
            saveImgOut.flush();
            saveImgOut.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

调用:

BitmapUtils.saveBitmap(path, BitmapUtils.compressImage(bitmap));//压缩返回

图片压缩框架进行压缩:

优点:效果好,效果好 缺点:比较局限,需要导入依赖,如果是插件化开发的项目就比较局限

首先进行依赖添加:

    compile 'top.zibin:Luban:1.1.8'

在这里插入图片描述
使用:

 Luban.with(getActivity())  //context
                        .load(path)  // 需要压缩的图片file
                        .ignoreBy(100)   //压缩率 ,默认100
                        .filter(new CompressionPredicate() {
                            @Override
                            public boolean apply(String path) {
                                return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
                            }
                        })
                        .setCompressListener(new OnCompressListener() {
                            @Override
                            public void onStart() {
                                // TODO 压缩开始前调用,可以在方法内启动 loading UI
                            }
                            @Override
                            public void onSuccess(File file) {
                                // TODO 压缩成功后调用,返回压缩后的图片文件
// 这个不是在主线程,跟新ui ,切换到主线程
                            }
                            @Override
                            public void onError(Throwable e) {
                                // TODO 当压缩过程出现问题时调用
                            }
                        }).launch();

总结:

两种方式都有优缺点,看个人的需求,新手肯定要从源码学起

框架引用:https://blog.youkuaiyun.com/qq_33209777/article/details/122472720

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值