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
正文之前先提一嘴,编写安卓程序之前,请把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
相关文章推荐
- android系统默认设置
- Android 9.png图片的制作方法
- Android 9.png图片的制作方法
- Android扩展:一个自动findViewById的小工具
- Android大图片裁剪终极解决方案(上:原理分析)
- 零点起飞学Android开发
- android 淘宝 抢红包脚本
- 在mac上从 Google Play 下载 Android 程序 apk 文件
- android国际化
- Android获取已安装应用信息(图标,名称,版本号,包)
- Android 命令行截图
- Android如何避免输入法弹出时遮挡住按钮或输入框
- Android Studio 快捷键
- android 动态控制状态栏显示和隐藏的方法实例
- Android中父View和子view的点击事件处理问题探讨
- Android 选取照片
- 在Android模拟器中经常出现以下错误 timeout Launch canceled!
- 基于CyberGarage库的dlna开发(android)
- android中关于焦点以及点击layout以外的地方关闭layout
- Android 隐藏RadoiButton左边按钮