开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:https://github.com/Curzibn/Luban

目前做APP开发总绕不开图片元素,如今手机拍照分辨率都非常高,图片压缩就显得非常重要,纯对图片进行裁切,压缩已经有很多文章介绍。但是裁切成多少,压缩成多少却很难控制好,裁切过头图片太小,质量压缩过头则显示效果太差。

于是,许多开发者就会想:微信是如何处理图片压缩的呢?据了解,我们上传到朋友圈的照片都会被压缩到50-200K,Curzibn通过在微信朋友圈发送近100张不同分辨率图片,对比原图与微信压缩后的图片逆向推算出来的压缩算法——Luban

这是一个号称可能是最接近微信朋友圈的图片压缩算法,目前已经在GitHub上获得 9373 个Star,1649 个Fork。(GitHub地址:https://github.com/Curzibn/Luban)

可以看下它和微信朋友圈压缩后的效果对比:

方法列表:

异步调用

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

Luban.with(this) .load(photos) .ignoreBy(100) .setTargetDir(getPath()) .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 压缩成功后调用,返回压缩后的图片文件 } @Override public void onError(Throwable e) { // TODO 当压缩过程出现问题时调用 } }).launch();

同步调用

同步方法请尽量避免在主线程调用以免阻塞主线程,下面以rxJava调用为例

Flowable.just(photos) .observeOn(Schedulers.io()) .map(new Function<List<String>, List<File>>() { @Override public List<File> apply(@NonNull List<String> list) throws Exception { // 同步方法直接返回压缩后的文件 return Luban.with(MainActivity.this).load(list).get(); } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe();

现在,你也可以尝试一下用其他语言实现Luban啦~

这可能是最接近微信朋友圈的图片压缩算法相关推荐

  1. Luban(鲁班)——可能是最接近微信朋友圈的图片压缩算法

    Luban Luban(鲁班)--Android图片压缩工具,仿微信朋友圈压缩策略 项目描述 目前做app开发总绕不开图片这个元素.但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题.单纯对 ...

  2. 一个仿微信朋友圈的图片查看框架 - PhotoViewer

    PhotoViewer 该图片查看器是模仿微信朋友圈查看图片编写 allprojects {repositories {...maven { url 'https://jitpack.io' }}}复 ...

  3. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  4. mfc让图片与按钮一起_微信朋友圈发图片还能添加语音,简单两步就能搞定!今天学到了...

    大家好,我是分享科技小达人~ 今天跟大家探讨的问题是:[微信朋友圈发图片添加语音的方法]. 日常生活中,我们都喜欢发朋友圈,今天就来教你如何在微信朋友圈,发送带语音的图片,方法非常简单,一起来学习一下 ...

  5. android怎么长按一张图片保存到相册_好看的微信朋友圈背景图片下载 让你的朋友圈封面个性起来...

    最近回老家了,由于风景比较好,发朋友圈的次数相比以前更多了一些,朋友之间的互动也明显多了一些.最近有朋友留言说,你的朋友圈封面挺个性的,也想要. 其实,之前为小伙伴们带来过好几期朋友圈封面背景图片,而 ...

  6. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

  7. Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能

    一.测试 实现: 二.添加依赖包: implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recycl ...

  8. 安卓开发仿微信图片拖拽_仿微信朋友圈发表图片拖拽和删除功能

    原标题:仿微信朋友圈发表图片拖拽和删除功能 中国联通在香港公布了上市公司2017年中期业绩.2017年上半年,公司主要业绩指标持续向好,收入稳步回升,服务收入达到人民币1,241.1亿元,同比增长3. ...

  9. android 打开微信好友动态图片,Android GridView仿微信朋友圈显示图片

    最近项目要求上传多图并且多图显示,而且要规则的显示,就像微信朋友圈的图片显示一样. 利用GridView再适合不过了,GridView可以动态加载图片的数量,而且还比较规律,下面说一下自己的思路: 1 ...

最新文章

  1. 区块链公司发现BCH团队比BTC团队更容易接近
  2. GPU Gems1 - 9 有效的阴影体渲染
  3. 计算机主板开机接线端子,装机必看,机箱前置面板接线向导,不怕再接错线了...
  4. 解决安装Tuxera NTFS For Mac后依旧无法写入的问题
  5. pipeline 发布war包
  6. 转:SQL Server 2005安装过程图解
  7. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
  8. MOE 分子动力学模拟操作
  9. Node.js菜鸟教程 思维导图
  10. 国家计算机网络设施英文简称,中国教育和科研计算机网的英文简称是
  11. 南大计算机专业课表,南京大学计算机科学与技术系2019-2020学年第一学期仙林校区.PDF...
  12. 标题:《东邪西毒》台词全本(国语版) (转)
  13. python运行出现OSError: [WinError 87] 参数错误。
  14. 得知大熊哥最后一天在岗位工作今天离开有感而发
  15. SuperMap iDesktopX 影像/栅格数据不用导入导出即可分析处理啦!
  16. SEH X64(3)
  17. textarea剩余可输入字数
  18. 洛谷P4942 小凯的数字
  19. 2022年苹果开发者账号/AppleID如何更改绑定的手机号
  20. 读书笔记《假若再上一次大学》1.1

热门文章

  1. qpython op怎么用_QPython OPAPP推广手机版下载
  2. 不到一周两起事故,Google无人驾驶汽车将按月披露事故细节
  3. C.H. Robinson罗宾逊全球物流推出跨欧亚铁路货运服务
  4. 蓝桥杯2017第八届C语言B组省赛习题题解——习题I.分巧克力
  5. Axure 表格选中和取消选中
  6. C++员工考勤管理系统
  7. 记忆碎片,关于魔兽世界
  8. 关闭计算机可以关闭word吗,win10电脑怎么关闭office更新
  9. WebAssembly Summit 总结:不要因为走得太远,而忘记为什么出发
  10. Python 清屏问题的解决