美文网首页Android 图片的处理三方Android
一句代码搞定 Android 图片压缩

一句代码搞定 Android 图片压缩

作者: zibin | 来源:发表于2016-07-26 12:01 被阅读3432次

Luban

Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略

工具描述

目前做app开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多文章介绍。但是裁切成多少,压缩成多少却很难控制好,裁切过头图片太小,质量压缩过头则显示效果太差。

于是自然想到app巨头“微信”会是怎么处理,Luban(鲁班)就是通过在微信朋友圈发送近100张不同分辨率图片,对比原图与微信压缩后的图片逆向推算出来的压缩算法。

因为是逆向推算,效果还没法跟微信一模一样,但是已经很接近微信朋友圈压缩后的效果,具体看以下对比!

效果与对比

内容 原图 Luban Wechat
截屏 720P 720*1280,390k 720*1280,87k 720*1280,56k
截屏 1080P 1080*1920,2.21M 1080*1920,104k 1080*1920,112k
拍照 13M(4:3) 3096*4128,3.12M 1548*2064,141k 1548*2064,147k
拍照 9.6M(16:9) 4128*2322,4.64M 1032*581,97k 1032*581,74k
滚动截屏 1080*6433,1.56M 1080*6433,351k 1080*6433,482k

导入

compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'

compile 'top.zibin:Luban:1.0.5'

使用

Listener方式

Luban内部采用io线程进行图片压缩,外部调用只需设置好结果监听即可

Luban.get(this)
    .load(File)                     //传人要压缩的图片
    .putGear(Luban.THIRD_GEAR)      //设定压缩档次,默认三挡
    .setCompressListener(new OnCompressListener() { //设置回调
    
        @Override
        public void onStart() {
            //TODO 压缩开始前调用,可以在方法内启动 loading UI
        }
        @Override
        public void onSuccess(File file) {
            //TODO 压缩成功后调用,返回压缩后的图片文件
        }
        
        @Override
        public void onError(Throwable e) {
            //TODO 当压缩过去出现问题时调用
        }
    }).launch();    //启动压缩

RxJava方式

RxJava 调用方式请自行随意控制线程

Luban.get(this)
        .load(file)
        .putGear(Luban.THIRD_GEAR)
        .asObservable()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnError(new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                throwable.printStackTrace();
            }
        })
        .onErrorResumeNext(new Func1<Throwable, Observable<? extends File>>() {
            @Override
            public Observable<? extends File> call(Throwable throwable) {
                return Observable.empty();
            }
        })
        .subscribe(new Action1<File>() {
            @Override
            public void call(File file) {
                //TODO 压缩成功后调用,返回压缩后的图片文件
            }
        });

开源地址

https://github.com/Curzibn/Luban

相关文章

  • 一句代码搞定 Android 图片压缩

    Luban Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略 工具描述 目前做app开发总绕...

  • Android 图片压缩 Luban 的 RxJava2.0 版

    前言 在一次偶然的情况下,在简书上看到 一句代码搞定 Android 图片压缩 真的是打瞌睡碰到了枕头啊~ 因为最...

  • swift 含有图片和文字的button的布局

    Swift - 一句代码搞定button图片和文字布局 处理上下左右各种图片布局的button,一句代码解决。 代...

  • iOS 图片压缩

    图片压缩核心代码 图片压缩调用 希望对你有帮助!

  • 图片压缩

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法、比例压缩法(根据路径获取图片并压缩)和比例压缩...

  • 25.性能优化要点

    网络层面 减少请求数量代码合并、雪碧图、内联图片、缓存 减小请求资源大小代码压缩、图片类型选择、图片压缩、http...

  • Android:图片压缩的几种方式

    1、前言 在Android中,图片的压缩对于内存的优化很重要 通过这篇文章对Android中的几种图片压缩方式进行...

  • Android 将文件压缩成ZIP

    Android 将文件压缩成ZIP 核心API: ZipOutputStream 两个方法搞定!

  • 图片压缩

    Android图片压缩常用的有质量压缩、尺寸压缩、采样率压缩以及通过JNI调用libjpeg库来进行压缩(尺寸压缩...

  • 【Android开发基础系列】图片专题

    1 图片编辑处理 1.1 图片裁切 转载自:bitmap的六种压缩方式,Android图片压缩 http://bl...

网友评论

  • 单人旁_ee3a:请问一下 luban 怎么判断 图片大小 从而走别的逻辑 如上传
  • 30770181eaeb:请问一下怎么这个库的混淆代码在哪里可以查到
  • 你咋不上天_666666:压缩速度好慢!如果是9张的话要好久
  • 橙一升:什么时候搞个 适配RxJava2.0的出来?
    橙一升:http://www.jianshu.com/p/ab283c30d92b
  • c16ca219a3be:你好 用到你的项目截图 但是假如四张图片地址传进去,好像有的时候裁剪四张 有的时候裁剪两张,可能和图片的大小有关,不好控制请问怎么解决呢
  • runner123:不错哦
  • longforus:不错 马克一下
  • cca8d6d1b7f2:压缩后图片不能显示是怎么回事?
  • yunhen:太牛啦😄
  • 王元_Trump:感觉很好 现在就去试试
  • OneBelowZero:亲 你的运行不了啊
    zibin:@OneBelowZero 你好,已经解决问题了,可以去我的 github clone 下来体验啦
  • 程序狮:github下载之后,怎么运行不了呢?
  • 72c35595f71b:用起来怎么样
    zibin:@feng0413 部分效果可看文章效果对比表,具体可以clone我的github项目运行体验。
  • 简书_王小虎:开源的的吗?
    zibin:@简书_王小虎 疏忽了,已补上开源地址
  • 一只阿拉斯加的虎:想知道是啥啊
    zibin:@64229f9db00c 已添加项目描述,希望能解决你的疑问

本文标题:一句代码搞定 Android 图片压缩

本文链接:https://www.haomeiwen.com/subject/wgunjttx.html