1、图片占用内存:占用的内存 = 图片长度 * 图片宽度 * 单位像素占用的字节数

注: 图片长度和图片宽度就是图片在行列上的像素数量。

图片格式:

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个字节

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

 

2、图片所占的硬盘大小:所占内存基础上进行压缩

  因为图片在内存中时是完全的图片信息,例如即使一个图是全白不透明或全黑全透明也会全部在内存中ffffffff/00000000占用所有的需要的空间。但是在硬盘上却是被压缩的状态,例如平时我们常见的jpg和png,都是将图片信息进行了压缩,然后存储在了硬盘上。所以说一个图片在内存中占用的空间要远大于在硬盘的空间。

1、png和jpg图片的选择

png:能用png最好是用png,32位的png颜色过渡平滑且支持透明。

jpg:是像素化压缩过的图片,质量已经下降了,一般不拿来做.9path的平铺拉伸的控件。

对于颜色繁杂的,比如照片墙纸,启动页面之类的图片,可用jpg。如果保存成png体积将是jpg的几倍甚至几十倍,严重浪费体积。其他的资源文件使用png。

2、像素压缩
  抽取图片行和列上的像素点,这会减小图片的尺寸。    
3、质量压缩
  相邻的像素点,如果ARGB数据比较相近,那么就会统一成相同的像素点数据,如:相邻的像素ARGB为: 00000001 和 00000000 ,在压缩时 两个点都会变成 00000000.

  相同的数据在存进磁盘时就可以不必每一个像素点数据进行存储,可以把一片像素点统一的存一个数据,减小磁盘占用,这会导致图片模糊,就像马赛克。

  如:一张长宽很大的图片,若你是纯黑的,你会发现在磁盘的占用非常小。

注:

 具体显示出来的图片还需要根据具体的屏幕渲染。

 若你图像压缩过的图片,放在一个很大的 ImageView 里同样会模糊

 若你质量压缩过的图片,放在一个很小的 ImageView 里同样不会模糊  

3、Options.inSampleSize 与 Compress

  1、Options.inSampleSize   (减小内存)

    用来从文件或输入流获取bitmap,对源文件存的bitmap使用像素压缩,抽取源图片的一部分像素点来组成一个新的,压缩过的bitmap并返回。

  2、Compress()    (减小磁盘存储)

    用来从bitmap保存到输出流,对源bitmap使用质量压缩,对bitmap的各个相邻相近像素点做像素数据统一,再把新的数据放到OutputStream。

     /**
* inSampleSize 图片进行压缩
* 若inSampleSize = n
* 那么图片会得到 原图的 2的n次分之一
* 但 如果 inSmapleSize = 1 时会得到原始数据
* 如:
* inSample 压缩
* 1 1
* 2 1/4
* 3 1/8
* 4 1/16
* @param inputStream 输入流
* @param ratio 压缩比
* @return bitmap
*/
public Bitmap loadSampleImage(InputStream inputStream,int ratio){
BitmapFactory.Options options = new BitmapFactory.Options();
// options.inJustDecodeBounds = true; // 开启只加载图片的大小,不直接加载图片
// BitmapFactory.decodeStream(inputStream,null,options);//加载图片流的信息到options ,不指定 padding 默认上下左右为0
// int width = options.outWidth;
// int height = options.outHeight;
options.inSampleSize = ratio;
//
options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null,options);
return bitmap; } /**
*
*
* @param bitmap
* @param quality 表示 压缩的后的质量 如 0 压缩100%,100意味着不压缩;
* @return 压缩后得到的数据会被存进 OutputStream 可以用于输出到文件
*/
public OutputStream loadCompressIamge(Bitmap bitmap,int quality){ ByteArrayOutputStream ops = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,50,ops);
return ops;
}

  

  

有关Option.inSamplSize 和 Compress 图片压缩的更多相关文章

  1. Bitmap之compress图片压缩

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  2. (转)Android学习-使用Async-Http实现图片压缩并上传功能

    (转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...

  3. android图片压缩总结

    一.bitmap 图片格式介绍 android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式: bitmap内存大 ...

  4. Android 图片压缩各种方式

       前言:由于公司项目当中需要用到压缩这块的相应技术,之前也做过的图片压缩都不是特别的理想, 所以这次花了很多心思,仔细研究和在网上找到了很多相对应的资料.为了就是 以后再做的时候直接拿来用就可以了 ...

  5. 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)

    涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...

  6. android 图片压缩

    引用:http://104zz.iteye.com/blog/1694762 第一:我们先看下质量压缩方法: private Bitmap compressImage(Bitmap image) { ...

  7. 基于canvas的前端图片压缩

    /*common*/ /** * canvas图片压缩 * @param {[Object]} opt [配置参数] * @param {[Function]} cbk [回调函数] * @retur ...

  8. Android图片压缩方法总结

    本文总结Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩).   第一:质量压缩方法:   ? 1 2 3 ...

  9. Android webview实现上传图片的效果(图片压缩)

    mainactivity代码 package com.bwie.webviewupload; import java.io.ByteArrayInputStream; import java.io.B ...

随机推荐

  1. LeetCode OJ--Permutation Sequence *

    求第k个排列. 刚开始按照一个排列一个排列的求,超时. 于是演算了一下,发下有数学规律,其实就是康托解码. 康托展开:全排列到一个自然数的双射 X=an*(n-1)!+an-1*(n-2)!+...+ ...

  2. DB2 导出数据文件

    export to c:/frameno2.del of del + [SQL 语句]

  3. AC日记——教辅的组成 洛谷 P1231

    题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...

  4. Java 添加播放MIDI音乐

      Java 在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐. 如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了. 网上很多播放MIDI的教程都是 ...

  5. 洛谷——P2919 [USACO08NOV]守护农场Guarding the Farm

    P2919 [USACO08NOV]守护农场Guarding the Farm 题目描述 The farm has many hills upon which Farmer John would li ...

  6. sort、dirname、添加环境变量、修改主机名、别名IP、静态路由

    1.split-按照指定行数或大小分割文件 -l:指定行数 -a:指定文件后缀长度 -d:使用数字作为后缀 -b:指定大小 # 以10行为单位对文件进行分割 split -l 10 /etc/init ...

  7. BT服务器的搭建(tracker-P2P服务器架设)(转)

    文章虽然有点老,但原理差不多. 继上一篇文章(http://www.cnblogs.com/EasonJim/p/6601146.html)介绍了BT的原理,现在来看下BT服务端搭建的原理. 一.BT ...

  8. Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作

    转自奔跑的熊猫原文 Web地图服务.WMS 请求方式.网络地图服务(WMS)的三大操作 1.GeoServer(地理信息系统服务器) GeoServer是OpenGIS Web 服务器规范的 J2EE ...

  9. mac apache配置虚拟主机

    设置虚拟主机 在终端运行“sudo vi /etc/apache2/httpd.conf”,打开Apche的配置文件 在httpd.conf中找到“#Include /private/etc/apac ...

  10. SQLAlchemy的查询操作Query

    查询操作 查询子句使用session的.query()方法来获取Query查询对象.查询对象能够使用一些方法来对应一些查询子句,比如.order_by(),.limit(),.filter()等. 查 ...