您的位置:首页 > 移动开发 > Android开发

Android 中的两种压缩图片方式

2013-12-06 16:42 204 查看
安卓开发经常用到bitmap,有些位图因容量过大,很容易导致内存溢出(OOM),本文就如何压缩大位图发表一下个人见解。

正文之前先提一嘴,编写安卓程序之前,请把eclipse中Window---preferences---genearl---workspace 中的编码格式改为UTF-8,不然你的程序放到另一台电脑时就可能出现中文乱码现象。下面两个Demo一个是在utf-8格式下编写的,一个是在GBK格式下编写的(换电脑以前写的),就出现了这种情况。有时候我们从网上DOWN下一个Dmeo,能运行,什么都好,就是注释是乱码,让人看了多少有些恼火,这就是因为编写Demo的作者的编码格式是默认的GBK格式,而你的是UTF-8模式。

第一种压缩方法 bitmap.compress(Bitmap.CompressFormat.JPEG, 30, outputStream);

这种方法好啊,简单,就这一句话,就能把一个几M的图片压缩到几百K,单从压缩能力上来说,还是可以的,但是它也有致命的缺陷,传入的位图过大,程序直接崩掉。我用了一张近14M的图片,程序就没跑起来。来看一下帮助文档:

方法中第一个参数:压缩的格式。(共有三种,自己查去)

方法中第二个参数:这个quality是质量、品质的意思,这个值从0~100,值越大,压缩的程度就越小,就越接近原图,值越小,压缩后的值就越小(以B为单位)。

方法中第三个参数:是一个输出流。这个方法的一个优点就是能把压缩后的图片直接放进这个输出流中,有了输出流,得到文件还会远吗?

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二种压缩方法 BitmapFactory.decodeResource(resources, resId, options);利用Bitmap工厂的方法压缩图片。

这种方法虽然不像上一种只用一句话就能解决,但是它也有自己的优点,再大的图我都能给你压缩,还不让你崩程序。我上午用了一张20M的位图测了一下,压缩后的位图只有14KB,不得不说,这种方法压缩能力还是很强的。既然它的压缩能力这么优秀,就是多写几行代码也是值得的。

详情请看demo。

对于安卓开发,我有一些看法:有些人说那些只知道要代码而不去创作代码的人很愚蠢,不去深入研究原理,只想着坐享其成,这种人很难进步。诚然,这话有一定道理,可是,我项目经理让我项目下周上线,我那还有时间寻根求源? 有句话说的好啊:有轮子你就用轮子,你还管轮子是怎么做的?开发时,你能巧妙的把别人的DEMO写进自己的程序,就已经进步了。搞开发,重要的是能把项目按需求按时间完成,法律也没规定每行代码必须出自自己之手不得借鉴。当然,如果大家都伸着脖子等原创代码,编程行业也不可能走到今天,有些人的确是大牛,能钻进去,领悟能力强;可有些人却没这些能力,之所以做程序员,全他妈给逼的。你是大神,你应该体会过刚入行时菜鸟的无奈,可以在闲暇时多写一些东西,帮一下后辈;你是菜鸟,也别尽想着“抄”别人代码不好(想抄好也不是那么容易的)。每个程序猿都有自己的定位,对编程行业或多或少都有自己的见解,今天我只是把自己的一些想法给写下来。忘了告诉你们,其实我就是菜鸟。

DEMO下载地址:

方法一:http://download.csdn.net/detail/laoziyueguo3/6669605

方法二:http://download.csdn.net/detail/laoziyueguo3/6669697

另附20M位图一张,实在放不进Demo,100M+,太猛了。
http://download.csdn.net/detail/laoziyueguo3/6669785
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: