最接近微信朋友圈的图片压缩算法【Bus Weekly】二十三期

9
回复
5777
查看
[复制链接]

0

主题

0

帖子

-10万

安币

VIP3

签到达人活跃会员推广达人优秀版主元老勋章明星会员

发表于 2016-10-17 17:36:46 | 显示全部楼层 |阅读模式

Luban
Luban(鲁班) —— Android图片压缩工具,仿微信朋友圈压缩策略。
项目描述
目前做App开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多文章介绍。但是裁切成多少,压缩成多少却很难控制好,裁切过头图片太小,质量压缩过头则显示效果太差。
于是自然想到App巨头“微信”会是怎么处理,Luban(鲁班)就是通过在微信朋友圈发送近100张不同分辨率图片,对比原图与微信压缩后的图片逆向推算出来的压缩算法。
因为有其他语言也想要实现Luban,所以描述了一遍算法步骤
因为是逆向推算,效果还没法跟微信一模一样,但是已经很接近微信朋友圈压缩后的效果,具体看以下对比!

效果图

效果与对比



导入


[XML] 查看源文件 复制代码
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'

compile 'top.zibin:Luban:1.0.9'

Release Notesv1.0.9, 2016/10/14
  • 修改压缩后文件自带后缀,根据(#77)提供的思路
使用Listener方式
Luban内部采用IO线程进行图片压缩,外部调用只需设置好结果监听即可:
[Java] 查看源文件 复制代码
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调用方式请自行随意控制线程:
[Java] 查看源文件 复制代码
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 压缩成功后调用,返回压缩后的图片文件
            }
        }).launch();    //启动压缩


方法对应表



作者:郑梓斌
源码下载:https://github.com/Curzibn/Luban


【Bus Weekly】二十三期

【一周优秀博文】

Retrofit2使用介绍
http://www.apkbus.com/blog-705730-62021.html

View的事件分发机制
http://www.apkbus.com/blog-705730-62020.html


聊聊IntentService那些事
http://www.apkbus.com/blog-705730-62019.html

懒加载Fragment 让应用更优化
http://www.apkbus.com/blog-705730-62015.html


View 的工作原理上 View 绘制流程梳理及 Measure 过程详解
http://www.apkbus.com/blog-705730-62007.html

简单实用的Android ORM框架TigerDB
http://www.apkbus.com/blog-705730-62003.html

基于OkHttp的封装库TigerOkHttp的使用
http://www.apkbus.com/blog-705730-62001.html

Dagger依赖注入浅析
http://www.apkbus.com/blog-705730-61996.html

Android RecyclerView绘制原理
http://www.apkbus.com/blog-705730-61960.html

PowerfulRecyclerView使用指导和源码分析
http://www.apkbus.com/blog-705730-61947.html


Android Studio多渠道打包和代码混淆教程
http://www.apkbus.com/blog-705730-61942.html

【一周Android精品源码推荐】


一款简易的聚合数据天气预报
http://www.apkbus.com/forum.php?mod=viewthread&tid=269140&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

自定义回到顶部按钮
http://www.apkbus.com/forum.php?mod=viewthread&tid=269106&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

自定义View实现热门标签效果的流式布局
http://www.apkbus.com/forum.php?mod=viewthread&tid=269056&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

基于Xmpp协议的即时通讯社交软件(客户端+服务端)
http://www.apkbus.com/forum.php?mod=viewthread&tid=268959&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

HappyReader一款新闻视频app
http://www.apkbus.com/forum.php?mod=viewthread&tid=268956&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

对RecyclerView的一个封装,添加一些实用的功能
http://www.apkbus.com/forum.php?mod=viewthread&tid=268949&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

一个平滑酷炫的分享按钮动画
http://www.apkbus.com/forum.php?mod=viewthread&tid=268917&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26sortid%3D12

高仿熊猫TV直播app UI
http://www.apkbus.com/forum.php?mod=viewthread&tid=268269&extra=page%3D1%26filter%3Dlastpost%26orderby%3Dlastpost%26digest%3D1%26sortid%3D12

近乎完美的互动直播源码,超低延时,标准RTMP方案无缝替换
http://www.apkbus.com/forum.php?mod=viewthread&tid=268730&extra=page%3D1%26filter%3Dlastpost%26orderby%3Dlastpost%26digest%3D1%26sortid%3D12

最好玩的Android开源连连看
http://www.apkbus.com/forum.php?mod=viewthread&tid=266434&extra=page%3D1%26filter%3Dlastpost%26orderby%3Dlastpost%26digest%3D1%26sortid%3D12

【一周优秀实例教程】


Android Studio ndk-Jni开发详细
http://www.apkbus.com/forum.php?mod=viewthread&tid=258012&extra=page%3D10%26filter%3Dauthor%26orderby%3Ddateline

Android子线程真的不能更新UI么
http://www.apkbus.com/forum.php?mod=viewthread&tid=258008&extra=page%3D10%26filter%3Dauthor%26orderby%3Ddateline

RxAndroid简单使用方法
http://www.apkbus.com/forum.php?mod=viewthread&tid=257969&extra=page%3D10%26filter%3Dauthor%26orderby%3Ddateline

代码规范和Android项目中的一些可用工具
http://www.apkbus.com/forum.php?mod=viewthread&tid=257960&extra=page%3D11%26filter%3Dauthor%26orderby%3Ddateline

Android Studio 中 Gradle 依赖的统一管理
http://www.apkbus.com/forum.php?mod=viewthread&tid=257844&extra=page%3D11%26filter%3Dauthor%26orderby%3Ddateline

Android studio翻译插件,告别蒙逼
http://www.apkbus.com/forum.php?mod=viewthread&tid=257803&extra=page%3D11%26filter%3Dauthor%26orderby%3Ddateline

Android 开学须知:GreenDao缓存
http://www.apkbus.com/forum.php?mod=viewthread&tid=257793&extra=page%3D11%26filter%3Dauthor%26orderby%3Ddateline

如何切换Fragment时实现数据保持
http://www.apkbus.com/forum.php?mod=viewthread&tid=257645&extra=page%3D12%26filter%3Dauthor%26orderby%3Ddateline

ActionBar样式完全详解
http://www.apkbus.com/forum.php?mod=viewthread&tid=257477&extra=page%3D12%26filter%3Dauthor%26orderby%3Ddateline

完美解决安卓上层输入控件随键盘弹起,下层UI不变形问题
http://www.apkbus.com/forum.php?mod=viewthread&tid=256724&extra=page%3D14%26filter%3Dauthor%26orderby%3Ddateline

第二十三周巴士之星公布

优秀博主:woshidasusu夏睿

精品源码热心巴友:curzbinForezpverney

问答区热心巴友:lilongfei0504

see you 咱们下期见~

安卓巴士官方微博链接

安卓巴士微信公众号


Bus Weekly回顾




[官方活动] 安卓巴士菁英会会员招募中~


安卓巴士线下活动【主题】【形式】我做主!!回复可得50安币~

http://www.apkbus.com/thread-266712-1-1.html?_dsign=88e7cfaf

【独家】老罗最新一季Android教学视频之旅(总汇)



致安卓巴士版主(及2016年版主招募计划启动中!)



原创文章,2016年APKBUS助你上头条







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

11

主题

9394

帖子

-12

安币

QQ游客

推广达人

发表于 2016-10-17 17:39:48 | 显示全部楼层
写的真的很不错

0

主题

9144

帖子

2379

安币

Android大神

Rank: 6Rank: 6

发表于 2016-10-17 17:45:48 | 显示全部楼层
写的真的很不错

85

主题

9794

帖子

2203

安币

Android大神

Rank: 6Rank: 6

发表于 2016-10-17 17:49:58 | 显示全部楼层
mark,收藏了

62

主题

9770

帖子

911

安币

代码手工艺人

学海无涯

Rank: 4

QQ达人

发表于 2016-10-17 17:51:28 | 显示全部楼层
学习...学习...

8

主题

9285

帖子

3548

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2016-10-17 17:58:18 | 显示全部楼层
帮帮顶顶!!

6

主题

9511

帖子

2877

安币

Android大神

Rank: 6Rank: 6

发表于 2016-10-17 18:03:18 | 显示全部楼层
不错不错,楼主辛苦了。。。

0

主题

0

帖子

276

安币

攻城狮

Rank: 3Rank: 3

发表于 2016-10-19 09:26:41 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )