android开发中对图片的处理方式汇总

本文介绍了Android中处理图片的各种方式,包括LruCache的内存管理、按规则压缩图片(质量压缩、采样率压缩、缩放、RGB_565、createScaledBitmap)、tinypng网站处理UI图、webP图片格式的使用,以及图片上传的luban压缩库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. LruCache 利用弱引用动态的管理内存(已经过时,但思想可以借鉴)

LruCache(Least Recently Used Cache) 全称最近最少使用算法,其主要思想是使用SoftReference(或者WeakReference),因为我们的缓存容量是有限的,它会面临一个问题:当有新的内容需要加入我们的缓存,但我们的缓存空闲的空间不足以放进新的内容时,我们就需要舍弃原有的部分内容从而腾出空间用来放新的内容。

在LruCache 中,我们使用url做key,bitmap做value,利用软引用的特性(在内存将满的时候会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会)及时的回收内存,这种方式能够及时有效回收图片所占用的内存,但这些方法并未完全解决单个图片占用内存过大的问题,在程序运行的过程中,图片该多大还多大。我们只是控制在内存中存在图片对象的个数而已。

与Lru相似的还有Lfu,前者是最近最少使用,即淘汰最长时间未使用的对象;后者是最近最不常使用,即淘汰一段时间内使用最少的对象。比如我们缓存对象的顺序是:A B C B D A C A ,当需要淘汰一个对象时,如果采用LRU算法,则淘汰的是B,因为它是最长时间未被使用的。如果采用LFU算法,则淘汰的是D,因为在这段时间内它只被使用了一次,是最不经常使用的。

注意:对于SoftReference(软引用)或者WeakReference(弱引用)的Bitmap缓存方案,现在已经不推荐使用了。自Android2.3版本(API Level 9)开始,垃圾回收器更着重于对软/弱引用的回收。

与此种方法类似,我们可以使用硬盘缓存(DiskLruCache)来进行图片的管理,这种方法比LruCache 节省内存,但读取速度较慢(硬盘的读取速度是未知的)。

2. 按照一定规则压缩图片(以android为例)

Android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小。
bitmap所占内存大小计算方式:
图片长度 x 图片宽度 x 一个像素点占用的字节数
以下是图片的压缩格式:
![BitMap 格式类型](https://img-blog.youkuaiyun.com/20161215104040200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE1NjQwNDU4Njc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。

ALPHA_8 
表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度 

ARGB_4444 
表示16位ARGB位图,即A=4,R=4,G=4,B=4,一个像素点占4+4+4+4=16位,2个字节 

ARGB_8888 
表示32位ARGB位图,即A=8,R=8,G=8,B=8,一个像素点占8+8+8+8=32位,4个字节 

RGB_565 
表示16位RGB位图,即R=5,G=6,B=5,它没有透明度,一个像素点占5+6+5=16位,2个字节
2.1 质量压缩(android sdk 提供)

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值