首先感谢这篇博客,给了我很大启发:Android中一张图片占据的内存大小如何计算

下面总结我的一些思考和收获:

1、图片都有尺寸,这里尺寸用的是图片属性的分辨率表示:1600*1600,代表宽和高均有1600个像素点,而一个像素点ARGB四个通道,每个通道共有256个值,在计算机存储中占8位,即1个字节,那么这张图片实际大小就是1600*1600*4/1024/1024=9.76MB,但你点开图片发现它的大小却只有几十K,这是怎么回事呢?其实是对原图片进行了压缩,不同格式的图片代表对原图片压缩的策略不同,举两个例子,jpg格式为无损压缩,它是利用了人眼睛在观察颜色缺失的事物时会自动用周围最近颜色填补的特性,所以丢失部分像素信息 。而png则是采用一种算法,通过记录原颜色信息的特征来简化信息,比如记录重复的像素的起始位置,从而实现减少信息量

2、但在android中,图片还是会解析成位图信息进行展示的,那是不是图片内存大小其实就还是:分辨率大小*像素呢,是的,不过这里BitmapFactory.decodeResource()方法比较特殊,它会根据res下不同dpi目录,对其中的图片分辨率做转换(其它decodeXxx方法都是按照原图分辨率计算):

设备的高度=原始高度*(设备dpi/目录对应的dpi)

设备的宽度=原始宽度*(设备dpi/目录对应的dpi)

3、综上,我们想要减少图片占用内存的大小,那么就需要从减小图片分辨率(即图片大小)和像素入手,减小分辨率可以通过BitmapFactory.Options.inSampleSize属性进行设置,表示将图片宽和高等比例缩小多少倍(至于缩小后像素颜色值如何排列和计算我就不清楚了,这是native层的逻辑);而减少像素大小可以通过设置处理图片的格式,我们一般默认采用的是ARGB_8888占2个字节,如果不需要透明度,可以设置RGB_565只需要2个字节,或者ARGB_4444,也需要2个字节

4、通过给定的URL,可以直接通过BitmapFactory.decodeStream(URL.openconnection())来获取Bitmap

5、内存外存的区别:内存容量小,但读写速度快,外存容量大,但读写速度远不及内存,内存存放系统及程序运行使用,一旦断电,所有内存都会消失,而外存不会

6.Bitmap的复用,通过设置BitmapFactory.Options的inMutable为true,inBitmap属性设置为可复用的Bitmap,这样通过decodeByteArray创建Bitmap时就会复用设置的inBitmap,不过需要注意,android4.3之前被复用的Bitmap的格式必须是png或jpg,而且两者的宽高、ARGB必须相同,采样率inSampleSize必须为1;4.4-7.1版本被复用的Bitmap只要所占内存不小于新建的Bitmap即可复用;而在8.0及以上版本,Bitmap数据存储在native内存,所以不会有gc等问题

public Bitmap decodeBitmap(byte[] data, Bitmap.Config config, int targetWidth, int targetHeight) {final BitmapFactory.Options options = new BitmapFactory.Options();//通过inJustDecodeBounds参数,先获取待生成Bitmap的尺寸信息options.inJustDecodeBounds = true;BitmapFactory.decodeByteArray(data, 0, data.length, options);//计算采样率        options.inSampleSize = calculateInSampleSize(options, targetWidth, targetHeight);                     options.inJustDecodeBounds = false;options.inMutable = true;//生成的bitmap可修改options.inPreferredConfig = config;//根据待生成Bitmap的尺寸信息,获取符合条件可复用的bitmapoptions.inBitmap = getReusableBitmap(options);return BitmapFactory.decodeByteArray(data, 0, data.length, options);
}

百度安全验证

关于图片本身大小、格式、内存、压缩相关知识相关推荐

  1. 如何压缩jpg图片的大小,快速压缩不模糊

    如何压缩jpg图片的大小,快速压缩不模糊呢?因为无论工作还是生活,我们现在接触到的图片的机会非常的频繁.尤其是现在智能手机的普及,我们为了记录生活,会拍摄非常多的照片.当我们的照片日积月累之后,我们对 ...

  2. 上传图片前限制图片比例大小格式

    上传图片前限制图片比例&大小&格式 一下代码适用于element-ui的upload: 使用上传图片之前的before-upload钩子函数,举个例子:限制图片尺寸大小为200px*2 ...

  3. 怎样修改图片kb大小?如何压缩图片jpg格式?

    大家在生活办公中经常会用到jpg图片文件,在制作小红书.抖音封面.公众号文章中都需要插入图片,但是图片大小各有不同,所以需要根据自己的需求进行jpg图片压缩.那么今天就为大家介绍一下使用jpg图片压缩 ...

  4. 压缩jpg图片的大小-免费批量压缩jpg图片的大小的软件

    如何压缩jpg图片的大小,今天给大家分享一款免费的压缩图片大小的软件,支持任意格式的图片,不仅可以压缩图片大小,调整图片尺寸.还支持自动水印添加.本地图片批量处理,图片库链接批量处理.详细参考图片 通 ...

  5. 图片转Svg格式以及压缩优化方法

    除了文中方法,还可以使用svgo工具对svg图片进行压缩:可参考svgo 背景 前端有些时候需要把像png.jpg等格式的图片转为svg格式的矢量图使用,但是直接去一些网站里转换,得到的svg代码往往 ...

  6. 操作系统 内存管理相关知识

    cpu执行程序的基本过程 译码器 输入为n管脚,输出为2^n根管脚,编号为从0到2^(n-1),用少的输入端控制更多的输出端 最常用的是三八译码器 AD(Address bus)地址总线: 选中一行数 ...

  7. php发送数据到视图格式_PHP-FPM的相关知识的深度解释

    一.需要搞清楚几个名词概念 1. CGI(Common Gateway Interface,CGI)通用网关接口, 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能.CGI ...

  8. ios 图片缩放,等比例压缩

    http://hi.baidu.com/d19890415/item/1ceb93eec881080c6dabb87d 将UIImage缩放到指定大小尺寸: - (UIImage *)scaleToS ...

  9. 怎么修改图片尺寸大小?图片改大小用什么软件?

    怎么修改图片尺寸大小?可以使用压缩啦的图片改大小(图片改大小 在线修改照片大小 图片修改大小工具-压缩啦)工具,不用下载安装就可以在线图片修改,一起来看看怎么操作吧. 1.进入压缩啦点击图片改大小. ...

最新文章

  1. TaskManager
  2. 华为与英特尔开展5G互操作性测试
  3. linux mysql5.6 编码_CentOS 7下修改MySQL5.6编码方式 解决网站中文显示问号
  4. python英语字典程序修改_详解如何修改python中字典的键和值
  5. C#学习笔记——MDI窗体(多文档界面)
  6. r语言导出html改不了名,请问如何进行数据框列的重命名?
  7. linux内核结构介绍
  8. 机器学习实际应用_机器学习的实际好处是什么?
  9. 作者:石磊,男,北京金信网银金融信息服务有限公司互联网金融行业数据分析师。...
  10. Scrapy中的item是什么
  11. 最大-最小 滤波器实现 及用于边缘检测
  12. collections模块 :namedtuple、deque、defaultdict、OrderedDict、ChainMap、Counter
  13. MeshLab合并CC生产的分块OBJ模型
  14. 【转载】如何统计分析网站的访问量
  15. 报表工具对比选型系列用例——排名及跨行组统计
  16. SpringBoot - 自动装配 源码解析
  17. 【读书笔记】两个天才 发挥孩子的创造力 4岁以上 蒲蒲兰绘本
  18. 智能合约在衍生品上的应用_5种衍生品在您的机器学习面试中表现出色
  19. RGB色彩的计算机表示
  20. yolov5 6.1官方模板TensorRT加速保姆级图文教程

热门文章

  1. mysql中db的名词解释_数据库常用名词解释大全
  2. 架构之占位式插件化框架 --组件通信
  3. EndNote的安装与使用
  4. GrabCut python实现
  5. 合阔智云核心生产系统切换到服务网格 ASM 的落地实践
  6. Modbus家族之 ASCII
  7. 关于前端代码埋点数据上报的实现
  8. ExoPlayer修改播放器UI
  9. Windows10莫名其妙多了个CD驱动器,删除方法记录
  10. 去除高清视频锯齿几个方法