关于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中图片压缩(质量压缩和尺寸压缩)的更多相关文章

  1. Android 中图片压缩分析(上)

    作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情 ...

  2. 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

    原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...

  3. Android中图片占用内存的计算

    Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html   在Android开发中,我现在发现很多人还不 ...

  4. PHP 图片操作(按照指定尺寸压缩,按照比例裁剪)

    提供二个常用的图片处理方法: 1.按照指定的尺寸压缩图片 /** * 按照指定的尺寸压缩图片 * @param $source_path 原图路径 * @param $target_path 保存路径 ...

  5. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  6. Android中图片的三级缓存

    为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi ...

  7. (转)Android中图片占用内存计算

    在Android开发中,我现在发现很多人还不会对图片占用内存进行很好的计算.因此撰写该博文来做介绍,期望达到抛砖引玉的作用.   Android中一张图片(BitMap)占用的内存主要和以下几个因数有 ...

  8. 简单地Android中图片的三级缓存机制

    我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存 ...

  9. Android中图片优化

    1.对图片进行压缩:建议使用TinyPNG工具压缩 2.WebP格式(支持4.0以上)可减少文件大小 3.尽量使用NinePatch的PNG 4.图片缓存

随机推荐

  1. CSS制作简单图标

    CSS制作图标包括知识点如border-width.border-style.border-color.border-radius.对元素的定位拼接.旋转等结合起来. 图标效果如下(拖动滑块可缩放图标 ...

  2. [转] Oracle数据库维护常用SQL语句集合

           原文地址 进程相关: 1. 求当前会话的SID,SERIAL# SELECT Sid, Serial# FROM V$session WHERE Audsid = Sys_Context ...

  3. linux上安装启动elasticsearch-5.5.1完整步骤

    linux上安装启动elasticsearch-5.5.1完整步骤 学习了:https://blog.csdn.net/hingcheung/article/details/77144574 http ...

  4. Android调试工具_ Stetho

    Stetho是Facebook开源的一个Android平台调试工具. Stetho能实如今不root手机的情况下,通过Chrome查看App的布局,Sqlite,SharedPreference.Ne ...

  5. HDU 5285 wyh2000 and pupil(dfs或种类并查集)

    wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Other ...

  6. oracle授权、表备份、用户管理

    用户管理 创建用户: create user 用户名 identified by 密码; 修改用户密码: alter user 用户名 identified by 密码; 激活用户: alter us ...

  7. Linux登录自动切换root账户与历史命令优化

    1:当我们Linux系统优化完成,会使用oldboy用户远程连接CRT登录,每次连接都需要使用sudo su - 或者su - 输入密码登录,请问如何在CRT连接的时候自动的切换到root账户,(提示 ...

  8. ASO--简单了解

    ASO是“应用商店优化”的简称.ASO(App Search Optimization)就是提升你APP在各类APP应用商店/市场排行榜和搜索结果排名的过程. 类似普通网站针对搜索引擎的优化,即SEO ...

  9. 一个程序员对微信小程序的看法

      我们公司用两周的时间开发了一款微信小程序,叫<如e支付>,大家可以去体验一下.由于接口都是写好的,所以开发起来很快.我将从4个不同的角度来介绍我对微信小程序的理解. 1.技术的角度   ...

  10. Codeforces Beta Round #22 (Div. 2 Only) E. Scheme dfs贪心

    E. Scheme   To learn as soon as possible the latest news about their favourite fundamentally new ope ...