对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多)
------------------------------------------------------------------------
首先单张图片的压缩处理,也是分析重点
专门撸了一个小demo(结尾会放出下载连接)将对应计算方法copy了出来,然后计算了几十组数据,进行了对比
原图宽高都是一个10000以内的随机整数,限定大小是400 200,然后进行压缩处理,记录了10组数据如下
 
控件缩放类型FIT_INSIDE和CROP在教程三-1的UIL框架分析中有详细说明,这里再简单说下
FIT_INSIDE是默认控件显示类型,图片会完整的显示在控件内,不一定会填满控件
CROP是使图片填充整个控件,图片可能会显示不全
具体效果大家可以在android项目里建一个imageview不设置缩放类型(即FIT_INSIDE效果), 再建一个scaleType为CROP的同大小控件,然后显示同一张图片,就会看出来区别了
官方/volley/imageloader都没有对缩放类型做区别处理,所以不同缩放类型下,最终压缩图片是一个size
结果我们也可以明显看出
官方算法是和UIL的CROP类型时结果一样的,实质上作用是保证压缩后图片宽高都要大于等于限定宽高,
Volley的那种对限定值的特殊处理方式,则实质上最终的效果是让压缩后的图片宽高任意一个大于等于限定宽高即可,则对应UIL的FIT_INSIDE效果
哪种好呢?(只针对图片的压缩处理而言)
UIL我们已经长篇详细的分析过了(教程系列三-1),对于缩放类型的处理是十分准确的,明显是最好的~(这么多人用不是没道理的)
那对比起来,官方的处理和Volley的则各有不足了~
官方=UIL CROP 即官方的处理方法其实更适合于CROP缩放类型的图片显示
然而在处理宽高比差别较大的图片时,如果是FIT_INSIDE显示模式,则会造成压缩图片略大,虽然能保证显示质量,但是浪费小部分内存资源
比如上图中的第一组数据,664 3640的压缩结果,明显和我们所需的400 200差别过大- - 脑补一下大概就是火柴盒跟西瓜刀吧(不是太准确~)
Volley=UIL FIT_INSIDE 则代表Volley更适合默认情况下的图片显示情况了
那么在处理宽高比差别过大的图片时,如果是CROP缩放类型,则压缩大小看起来是差不多了,但实际上显示效果是无法达到预期的,大小我们可以从size数值上看出来,显示效果我还是弄个实际图片大家对比看看吧(可以在文章末尾下载demo项目)
丧心病狂的找了个微博长图实验,项目一共四个ImageView控件,上面俩是Volley,下排是UIL,左边俩是FIT_INSIDE效果,右边则是CROP
而我说的Volley在过大宽高差时,用CROP类型显示无法达到预期质量的效果,就是右上角这个图了,简直就是我不戴眼镜看世界滴样子
对比下,UIL在处理CROP情况时效果十分有保障~
 
上面缺点都有个条件宽高比差别过大,因为大部分情况下,原图的宽高比是比较稳定的,而我们限定值也都是差不多的,大部分情况都是设为一个正方形的限定大小,原图基本也都是接近正方形的矩形~这就解释了为什么大部分的图片框架包括官方教程中都没有专门对不同缩放类型做区分处理,因为一般情况下,即长宽比稳定差别不大的情况下,官方的那种简单处理都是适用滴
参考上面数据我们也可以得出,当原图长宽比和限定长宽比越相近,则两种不同算法(官方和UIL的CROP是一种,Volley和UIL的FIT_INSIDE是另一种)的区别越小,当原图和限定值的长宽比十分相似甚至相等时,那两种算法最终的结果就一样了(比如数据中红色加粗的部分)
而我们看长宽比差别较大的第一组数据和倒数第二组数据,两种算法的差别直接是2^4=16倍~大家有兴趣可以自行尝试,弄几个更大比例的特殊值试一试
------------------------------------------------------------------------
图片色彩样式对比
Volley写死了是RGB_565
ImageLoader没有设置,那应该就是默认的ARGB_8888
UIL提供设置API,默认则也是ARGB_8888
------------------------------------------------------------------------
缓存池对比
Volley只有接口...实例类都没有,不过写起来也很简单
ImageLoader则主要是单强引用,单软引用两种
UIL提供了8种类型,弱和强,单独以及混合的,包括不同的算法
区别就在于软引用和弱引用的不同,这个直接看教程二里面针对不同引用类型的介绍就行了,也可以自行百度搜,其实两者区别不大
强引用部分也都差不多,即使使用了最新的LruCache类,其实看源码我们也会发现内部还是用LinkedHashMap实现的
------------------------------------------------------------------------

综上,肯定是UIL完全胜出了,还有很多拓展功能部分也都是UIL更加强大没跑了
不过Volley框架我们之前也说过了,虽然功能不够完善,但十分适合我们二次开发
ImageLoader吗,稍微简单点,可以当学习源码的小练手来用

------------------------------------------------------------------------

最后滴最后,demo简单介绍下
drawable包下有一个长宽比很大的微博长图,还有一个正常的接近正方形的图,
代码只有一个类,里面把几种压缩算法都贴出来了,测试方法也已经写好,大家可以自行修改数值计算,也可以拷贝一些图片进去看其他比例图片的效果
布局文件对应也只有一个,里面放了4个imageView,俩普通的,俩center_crop的,也就是对应的CROP缩放类型,控件缩放类型和UIL框架缩放类型的对应关系,参考教程三-1的UIL介绍里

足够多豆子滴直接下载,不够的可以回复显示网盘下载地址,地址失效时可以私信联系我

游客,如果您要查看本帖隐藏内容请回复
---------------------------------------------------------------------------

系列链接

Android Bitmap 全面解析(一)加载大尺寸图片 
http://www.eoeandroid.com/thread-331669-1-1.html

Android Bitmap 全面解析(二)加载多张图片的缓存处理
http://www.eoeandroid.com/thread-332399-1-1.html

Android Bitmap 全面解析(三)开源图片框架分析1-UIL(上)
http://www.eoeandroid.com/thread-333220-1-1.html

Android Bitmap 全面解析(三)开源图片框架分析1-UIL(下)
http://www.eoeandroid.com/thread-333229-1-1.html

 
Android Bitmap 全面解析(三)开源图片框架分析2-ImageLoader和Volley
 
Android Bitmap 全面解析(四)图片处理效果对比
http://www.eoeandroid.com/thread-334752-1-1.html

---------------------------------------------------------------------------

 

(完结撒花)
此系列结束,评论我大部分都会看,有问题的地以会重新编辑修改帖子完善一下
还有一个Volley二次封装,估计篇幅会过大,以后可能新开系列贴,希望大家多多支持

全部原创,所以转载希望能注明出处,还作者信息: BoreDream 意译 般若梦  音译 爆菊

Android Bitmap 全面解析(四)图片处理效果对比 ...的更多相关文章

  1. 36、Android Bitmap 全面解析

    Android Bitmap 全面解析(一)加载大尺寸图片 http://www.eoeandroid.com/thread-331669-1-1.html Android Bitmap 全面解析(二 ...

  2. Android Bitmap 全面解析(一)加载大尺寸图片

    压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory ...

  3. [转]Android Volley完全解析(四),带你从源码的角度理解Volley

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是 ...

  4. Android Volley全然解析(四),带你从源代码的角度理解Volley

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/17656437 转载请注明出处:http://b ...

  5. Android Volley完全解析(四),带你从源码的角度理解Volley

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是 ...

  6. Android Bitmap 全面解析(二)加载多张图片的缓存处理

    一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~ ...

  7. Android Volley完全解析

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  8. Android Volley完全解析(三),定制自己的Request

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17612763 经过前面两篇文章的学习,我们已经掌握了Volley各种Request ...

  9. Android Animation学习(四) ApiDemos解析:多属性动画

    Android Animation学习(四) ApiDemos解析:多属性动画 如果想同时改变多个属性,根据前面所学的,比较显而易见的一种思路是构造多个对象Animator , ( Animator可 ...

随机推荐

  1. Jquery each() 如何操作动态添加的DOM元素

    JQ each页面上的DOM元素的时候,如果有一部分的DOM是ajax异步加载的,那么each可能遍历不到元素,异步请求数据的同时不会影响后面的代码执行,今天就遇到这个问题了, 解决方案是讲ajax改 ...

  2. java中的自增问题

    运行下面这段代码,其结果是什么呢? package com.test; public class Inc { public static void main(String[] args) { Inc ...

  3. C#异步编程一

    前几天把Code First系列总结完,想着下步总结什么,原本想着XML,不过XML的内容比较多,还有3天班就中秋节了,想在中秋节前在完成一个系列,所以决定把异步这块总结下.说起异步可能会认为就是多线 ...

  4. Java Web系列:Spring Boot 基础

    Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置.使用Spring Boot 不会降低学习成本,甚至增加了 ...

  5. #Linux学习笔记# Linux文件的所有者、群组和其他人

    1.关于所有者.群组和其他人 在Linux系统中,每个文件都具有User.Group和Others三种身份的权限配置.那这三种身份分别表示什么意思呢?配置这三种身份的权限有啥意义呢? (1)文件所有者 ...

  6. 端口扫描之王——nmap入门精讲(二)

    接着讲上节的内容,上节中提到了一个时间优化的问题是使用参数-n,通过不解析地址来进行优化时间的,但是优化时间的方法还有很多,比如说我们可以通过时间优化(0-5),指定单位时间内的探针数,设置组的大小 ...

  7. 如何申请TexturePacker

    对于很多做手机游戏的和用starling做页游的盆友,对TexturePacker应该并不陌生,但是呢,能免费申请注册码你造吗,你想要吗,TexturePacker的作者Adreas是个好人,只要你R ...

  8. asp.net网站安全常见问题与防范

    1:SQL 注入 2:XSS 3:CSRF 4:文件上传 1:SQL 注入 引起原因: 其实现在很多网站中都存在这种问题.就是程序中直接进行SQL语句拼接.可能有些读者不太明白. 下面通过一个登录时对 ...

  9. 2、面向对象以及winform的简单运用(面向对象的四大基本特性)

    面向对象的四大基本特性 面向对象的核心概念就是封装.抽象.继承.多态这四大基本特性,在这里先解释一下它们的定义: 封装:是一种隐藏信息的特性.找到变化并且把它封装起来,你就可以在不影响其它部分的情况下 ...

  10. iOS开发icon&images Size

    https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix ...