也谈android开发图像压缩

标签: android 开发 图像压缩 | 发表时间:2015-08-15 21:24 | 作者:u012702547
出处:http://blog.csdn.net

long long ago,给学院做的一个通讯录App需要有一个上传图像的功能,冥思苦想,绞尽脑汁后来还是没解决(学生时代的事),于是就直接上传原图了,一张图片2M到3M,这样我的应用发布之后,那绝对是流量杀手。最近有意无意看到了一些android中图像压缩的文章,现在总结出来与大家分享一下。


方式一

我在 android开发之bitmap使用这篇博文结束的时候介绍了bitmap图像压缩的事,但是由于时间原因没有细说,bitmap在转化为流的过程中可以进行压缩,前提是不能压缩为一些无损压缩格式,比如PNG,我们可以把图像压缩为jpg格式。至于怎么获得一个Bitmap对象,请参考 android开发之bitmap使用
看两行代码,格式要选择为非PNG格式才可以压缩:

  FileOutputStream out = new FileOutputStream(path + "456.gif");
                //0意味着压缩到最小,100意味着压缩后的质量最好,PNG是无损图像,会忽略这个参数
//              bp.compress(Bitmap.CompressFormat.JPEG, 100, out);
                bp.compress(Bitmap.CompressFormat.PNG, 0, out);
                out.flush();
                out.close();

这是利用Bitmap自带的方法来进行压缩,但是用过之后你会发现者这种方式压缩得到的图片质量其实特别差。


方式二

要想获得压缩质量好的图片,我们可采用另外一种方式,在BitmapFactory中的几个获得Bitmap对象的方法中,几乎每一种方式都提供了option参数,这个参数我在上文中也有详细的介绍:

  inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。

inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回值为null,但是Options的outAbc中解出了图像的基本信息。

inSampleSize 设置decode时的缩放比例。当值大于1时会对图像进行压缩,比如设置为4时,返回的图像宽高都将是原始图像的四分之一,像素是原始图像的十六分之一,如果设置的值小于1,则会被当作1来处理。注意,这里设值必须是2的次幂,其他值会被就近取离2的次幂最近的值。

于是一个新的压缩思路就出炉了:先设置inJustDecodeBounds为true,拿到图像的基本信息,比如宽和高,如果图像的宽和高大于目标宽高,那我们通过移位运算减少宽高,直至我们想要的值。然后根据这个值,设置inSampleSize的值,这样就会拿到一个失真较小的压缩后图像了。

核心代码:

          while (true) {
            if ((options.outWidth >> i <= 2000)
                    && (options.outHeight >> i <= 2000)) {
                in = new BufferedInputStream(
                        new FileInputStream(new File(path)));
                options.inSampleSize = (int) Math.pow(2.0D, i); // 幂运算 i为几次方
                options.inJustDecodeBounds = false;
                bitmap = BitmapFactory.decodeStream(in, null, options);
                break;
            }
            i += 1;
        }

本文完整代码下载

作者:u012702547 发表于2015/8/15 13:24:51 原文链接
阅读:82 评论:0 查看评论

相关 [android 开发 图像压缩] 推荐:

也谈android开发图像压缩

- - CSDN博客推荐文章
long long ago,给学院做的一个通讯录App需要有一个上传图像的功能,冥思苦想,绞尽脑汁后来还是没解决(学生时代的事),于是就直接上传原图了,一张图片2M到3M,这样我的应用发布之后,那绝对是流量杀手. 最近有意无意看到了一些android中图像压缩的文章,现在总结出来与大家分享一下. 我在 android开发之bitmap使用这篇博文结束的时候介绍了bitmap图像压缩的事,但是由于时间原因没有细说,bitmap在转化为流的过程中可以进行压缩,前提是不能压缩为一些无损压缩格式,比如PNG,我们可以把图像压缩为jpg格式.

Android开发Tips

- - CSDN博客推荐文章
欢迎Follow我的 GitHub, 关注我的 CSDN.. 介绍一些, 在Android开发中, 会经常使用的小知识点.. submodule与git可以保持实时同步. 导入, 路径多于一个, 前面不添加冒号(:).. 使用PackageManager.. // 检查App是否安装 private boolean appInstalledOrNot(String uri) {.

如何节省 1T 图片带宽?解密极致图像压缩

- - IT瘾-dev
图像已经发展成人类沟通的视觉语言. 无论传统互联网还是移动互联网,图像一直占据着很大部分的流量. 如何在保证视觉体验的情况下减少数据流量消耗,一直是图像处理领域研究的热点. 也诞生了许多种类的图像格式JPEG、PNG 、GIF、WEBP、HEVC,以及腾讯公司自研的WXAM和SHARPP格式. 腾讯TEG - 架构平台部图片存储系统TPS 作为超大规模的图片平台,图片数万亿张存储量百P,下载带宽数T,一直需要严重关注图像压缩技术的发展.

Android 开发者调查

- - 爱范儿 · Beats of Bits
Startup 是为 Android 开发者提供盈利模式的一个公司. Android 开发者只要在应用上推广 Startup 服务,并且为网站带去流量,就可以得到网站给予的补贴. 今年 3 月的时候,Startup 网站对 Android 开发者进行了一次调查. 现在,他们将调查的结果制成了信息图,并 发布在网站之上.

Android敏捷开发指南

- - 互联网的那点事
本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案. 作者中分析了移动开发中常见的问题,从两方面阐述了ThoughtWorks使用的测试开发方案和相应的架构方法与常用工具应用,并进一步阐述了为移动开发流程所提供的持续发布方案. 随着云计算、移动互联等一系列新技术概念的崛起,新一轮的IT经济正在不断扩大发展.

Android应用开发资源

- - InfoQ cn
Android应用设计和开发人员现在可以参考由Android用户体验(UX)团队官方发布的 Android设计指南. 该指南提供了开发者应该遵循的基本原则,并列出了很多细节指导,涉及 设备与显示、 主题、 触控交互、 度量与栅格、 排版、 色彩、 图标设计,以及如何 编写用户交互界面的提示语.

Android 开发视频推荐

- - 大猫の意淫筆記
作为 Android 死忠粉,总是想自己来两手,无奈没摸过后台开发,面向的唯一对象就是马总. 花了个把星期入个门,发现还是挺好玩的. 市面上的 Android 入门书有2个主要问题,一个是都要求有 Java 基础,另一个是跟不上 Android 版本更新.所以并不推荐买书学习. 斯坦福大学公开课:编程方法学.

Android 开发者在 Android Market 上兜售应用

- SotongDJ - 谷安——谷奥Android专题站
无论你是 Android 用户还是开发者,我们相信你会同意我们所说的一个事实:Android Market 还远未完善,我们不是在谈论它的用户界面或者是如何“开放”,而是另外一个话题. CatNinjaFly,或者是 SuperNinjaCat,又或者是 NinjaCatFly. 叫什么都不要紧,要紧的是我们关心的这个问题,要紧的是它们都是来自同一开发者的完全是相同的游戏,很显然,开发者(商)NANJAANDROID 为了让他们的应用能够在 Android Market 多一些曝光率于是用不同的名称来在 Android Market 中兜售.

Eclipse开发Android应用程序入门

- Bingnan - 酷壳 - CoolShell.cn
原文出处:http://www.smashingmagazine.com/2010/10/25/get-started-developing-for-android-with-eclipse/. 如今的移动设备应用程序开发充满着让人振奋的东西. 功能强大的硬件支持,平板电脑,多样的软件平台(塞班 OS,iOS,WebOS,Windows Phone 7…),移动设备开发者前景充满了机会和挑战.

android开发书籍emule下载链接

- jing77 - biAji HeRe
本来放在Verycd的,出于避免某些难以预料的问题的考虑(就像Verycd的诸多电影资源一样),我不得不觉得应该将Verycd作为一个备选方案. ed2k: [android.开发书籍].Beginning.Android.2.(Apress,.2010,.1430226293).pdf. ed2k: [android.开发书籍].Hello.Android.3rd.Edition.pdf.