Android中图片压缩(质量压缩和尺寸压缩)
关于Android 图片压缩的学习:
自己总结分为质量压缩和像素压缩。质量压缩即:将Bitmap对象保存到对应路径下是所占用的内存减小,但是当你重新读取压缩后的file为Bitmap时,它所占用的内存并没有改变,它会改变其图像的位深和每个像素的透明度,也就是说JPEG格式压缩后,原来图片中透明的元素将消失,所以这种格式很可能造成失真。像素压缩:将Bitmap对象的像素点通过设置采样率,减少Bitmap的像素点,减小占用内存。两种压缩均可能对图片清晰度造成影响。
(一)
/**
*
* @description 将图片保存到本地时进行压缩, 即将图片从Bitmap形式变为File形式时进行压缩,
* 特点是: File形式的图片确实被压缩了, 但是当你重新读取压缩后的file为 Bitmap是,它占用的内存并没有改变
* 所谓的质量压缩,即为改变其图像的位深和每个像素的透明度,也就是说JPEG格式压缩后,原来图片中透明的元素将消失,所以这种格式很可能造成失真
* @date 2015年8月25日
* @param bmp
* @param file
*/
public static void compressBmpToFile(Bitmap bmp,File file) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int options = 80;
bmp.compress(CompressFormat.JPEG, options, baos);
while(baos.toByteArray().length/1024 > 100){
baos.reset();
options -= 10;
bmp.compress(Bitmap.CompressFormat.JPEG, options,baos);
}
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(二)
/**
*
* @description 将图片从本地读到内存时,即图片从File形式变为Bitmap形式
* 特点:通过设置采样率,减少图片的像素,达到对内存中的Bitmao进行压缩
方法说明: 该方法就是对Bitmap形式的图片进行压缩, 也就是通过设置采样率, 减少Bitmap的像素, 从而减少了它所占用的内存
* @date 2015年8月25日
* @param image
* @return
*/
private Bitmap compressBmpFromBmp(String srcPath){
BitmapFactory.Options newOptions = new BitmapFactory.Options();
newOptions.inJustDecodeBounds = true;//只读边,不读内容
Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOptions);
newOptions.inJustDecodeBounds = false;
int w = newOptions.outWidth;
int h = newOptions.outHeight;
float hh = 800f;
float ww = 480f;
int be = 1;
if(w > h && w >ww){
be = (int)(newOptions.outWidth/ww);
}else if (w < h && h > hh) {
be = (int)(newOptions.outHeight/hh);
}
if(be <= 0)
be = 1;
newOptions.inSampleSize = be;//设置采样率
newOptions.inPreferredConfig = Config.ARGB_8888;//该模式是默认的,可不设
newOptions.inPurgeable = true;//同时设置才会有效
newOptions.inInputShareable = true;//当系统内存不够时候图片会自动被回收
bitmap = BitmapFactory.decodeFile(srcPath, newOptions);
return bitmap;
}
Android中图片压缩(质量压缩和尺寸压缩)的更多相关文章
- Android 中图片压缩分析(上)
作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情 ...
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析
原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...
- Android中图片占用内存的计算
Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html 在Android开发中,我现在发现很多人还不 ...
- PHP 图片操作(按照指定尺寸压缩,按照比例裁剪)
提供二个常用的图片处理方法: 1.按照指定的尺寸压缩图片 /** * 按照指定的尺寸压缩图片 * @param $source_path 原图路径 * @param $target_path 保存路径 ...
- Android中图片的三级缓存策略
在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...
- Android中图片的三级缓存
为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi ...
- (转)Android中图片占用内存计算
在Android开发中,我现在发现很多人还不会对图片占用内存进行很好的计算.因此撰写该博文来做介绍,期望达到抛砖引玉的作用. Android中一张图片(BitMap)占用的内存主要和以下几个因数有 ...
- 简单地Android中图片的三级缓存机制
我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存 ...
- Android中图片优化
1.对图片进行压缩:建议使用TinyPNG工具压缩 2.WebP格式(支持4.0以上)可减少文件大小 3.尽量使用NinePatch的PNG 4.图片缓存
随机推荐
- asterisk 问题
Q:SIP可以呼通,但听不到声音A:一般是NAT问题造成.如果Asterisk处在NAT的后面,则Asterisk的配置如下: ------------------------------------ ...
- JavaOne Online Hands-on Labs
http://www.oracle.com/technetwork/java/index-156938.html
- 如何扩展ArcGIS中的元数据编辑器
http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...
- linux系列之-—03 常见问题
问题1 描述:Linux如何查看JDK的安装路径 问题2 描述:执行shell脚本时报错,错误信息为:bash: line 19: jar: command not found 原因:因为在系统环境变 ...
- Linux—read
read:将信息读入一个或多个Shell变量 语法格式:read [-r] 变量名 选项: -r:原始读入,不做任何处理,不将结尾结尾处的反斜杠解释为续行字符 行为模式 ...
- 嵌入式开发之davinci---IPIPE、IPIPEIF and ISIF这三者有什么区别
(1)缩写概念 (2)各自区别 (3)不同sensor 采集接口 (4)采集后的数据链路link (5)8127 中的iss和ipipe的区别 (1)缩写概念 http://www.ti.com.cn ...
- 最齐全的站点元数据meta标签的含义和使用方法
最齐全的站点元数据meta标签的含义和使用方法 随着HTML5的流行和Web技术的不断演变,Meta标签队伍也越来越壮大,从Windows XP的IE6到现在Windows 7.Windows 8的I ...
- 程序员的vim
1,所有的Unix like系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在,但是目前我们使用比较多的是vim编辑器 vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序 ...
- XML中的CDATA是什么?PCDATA是什么?
PCDATA表示已解析的字符数据. 在CDATA内部的所有内容都会被解析器忽略.
- Mac配置环境变量(Java,Android,Gradle,Nodejs,MongoDB,Maven,Hosts)
JAVA_HOME 配置环境变量 # 使用vim打开.bash_profile文件.加入java环境变量 $ vim .bash_profile export JAVA_HOME=$(/usr/lib ...