怎么用手机把图片如何压缩图片内存大小的内存很小

1581人阅读
android开发-进阶篇(6)
中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式:
图片长度 x 图片宽度 x 一个像素点占用的字节数
以下是图片的压缩格式:
其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。
表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度&
ARGB_4444&
表示16位ARGB位图,即A=4,R=4,G=4,B=4,一个像素点占4+4+4+4=16位,2个字节&
ARGB_8888&
表示32位ARGB位图,即A=8,R=8,G=8,B=8,一个像素点占8+8+8+8=32位,4个字节&
表示16位RGB位图,即R=5,G=6,B=5,它没有透明度,一个像素点占5+6+5=16位,2个字节
我是用的小米手机2s来测试的,从sd卡取出一个照片,如下所示:
bit = BitmapFactory.decodeFile(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ &/DCIM/Camera/test.jpg&);
Log.i(&wechat&, &压缩前图片的大小& + (bit.getByteCount() / 1024 / 1024)
+ &M宽度为& + bit.getWidth() + &高度为& + bit.getHeight());
出来的log是:&
将取得的bitmap进行压缩,下面开始说,bitmap的几种压缩方式。
1.质量压缩
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int quality = Integer.valueOf(editText.getText().toString());
press(CompressFormat.JPEG, quality, baos);
byte[] bytes = baos.toByteArray();
bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Log.i(&wechat&, &压缩后图片的大小& + (bm.getByteCount() / 1024 / 1024)
+ &M宽度为& + bm.getWidth() + &高度为& + bm.getHeight()
+ &bytes.length=
& + (bytes.length / 1024) + &KB&
+ &quality=& + quality);
其中quality是从edittext获取的数字,可以从0–100改变,这里出来的log是:&
可以看到,图片的大小是没有变的,因为质量压缩不会减少图片的像素,它是在保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,这也是为什么该方法叫质量压缩方法。那么,图片的长,宽,像素都不变,那么bitmap所占内存大小是不会变的。
但是我们看到bytes.length是随着quality变小而变小的。这样适合去传递二进制的图片数据,比如分享图片,要传入二进制数据过去,限制32kb之内。
这里要说,如果是press(CompressFormat.PNG, quality, baos);这样的png格式,quality就没有作用了,bytes.length不会变化,因为png图片是无损的,不能进行压缩。
CompressFormat还有一个属性是,CompressFormat.WEBP格式,该格式是google自己推出来一个图片格式,更多信息,文末会贴出地址。
2.采样率压缩
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
bm = BitmapFactory.decodeFile(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ &/DCIM/Camera/test.jpg&, options);
Log.i(&wechat&, &压缩后图片的大小& + (bm.getByteCount() / 1024 / 1024)
+ &M宽度为& + bm.getWidth() + &高度为& + bm.getHeight());
出来的log是
设置inSampleSize的值(int类型)后,假如设为2,则宽和高都为原来的1/2,宽高都减少了,自然内存也降低了。
我上面的代码没用过options.inJustDecodeBounds = 因为我是固定来取样的数据,为什么这个压缩方法叫采样率压缩,是因为配合inJustDecodeBounds,先获取图片的宽、高【这个过程就是取样】,然后通过获取的宽高,动态的设置inSampleSize的值。
当inJustDecodeBounds设置为true的时候,BitmapFactory通过decodeResource或者decodeFile解码图片时,将会返回空(null)的Bitmap对象,这样可以避免Bitmap的内存分配,但是它可以返回Bitmap的宽度、高度以及MimeType。
3.缩放法压缩(martix)
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);
bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(),
bit.getHeight(), matrix, true);
Log.i(&wechat&, &压缩后图片的大小& + (bm.getByteCount() / 1024 / 1024)
+ &M宽度为& + bm.getWidth() + &高度为& + bm.getHeight());
出来的log是&
可以看出来,bitmap的长度和宽度分别缩小了一半,图片大小缩小了四分之一。&
关于martix更多信息,文末会有一个参考文章。
4.RGB_565法
出来的log是:&
BitmapFactory.Options options2 = new BitmapFactory.Options();
options2.inPreferredConfig = Bitmap.Config.RGB_565;
bm = BitmapFactory.decodeFile(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ &/DCIM/Camera/test.jpg&, options2);
Log.i(&wechat&, &压缩后图片的大小& + (bm.getByteCount() / 1024 / 1024)
+ &M宽度为& + bm.getWidth() + &高度为& + bm.getHeight());
我们看到图片大小直接缩小了一半,长度和宽度也没有变,相比argb_8888减少了一半的内存。
注意:由于ARGB_4444的画质惨不忍睹,一般假如对图片没有透明度要求的话,可以改成RGB_565,相比ARGB_8888将节省一半的内存开销。
5.createScaledBitmap
bm = Bitmap.createScaledBitmap(bit, 150, 150, true);
Log.i(&wechat&, &压缩后图片的大小& + (bm.getByteCount() / 1024) + &KB宽度为&
+ bm.getWidth() + &高度为& + bm.getHeight());
出来的log是&
这里是将图片压缩成用户所期望的长度和宽度,但是这里要说,如果用户期望的长度和宽度和原图长度宽度相差太多的话,图片会很不清晰。
以上就是5种图片压缩的方法,这里需要强调,他们的压缩仅仅只是对android中的bitmap来说的。如果将这些压缩后的bitmap另存为sd中,他们的内存大小并不一样。
android手机中,图片的所占的内存大小和很多因素相关,计算起来也很麻烦。为了计算出一个图片的内存大小,可以将图片当做一个文件来间接计算,用如下的方法:
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + &/DCIM/Camera/test.jpg&);
Log.i(&wechat&, &file.length()=& + file.length() / 1024);
FileInputStream fis =
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.i(&wechat&, &fis.available()=& + fis.available() / 1024);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
上面两个方法计算的结果是一样的。
看完了这篇内容,其实说白了,Bitmap压缩都是围绕这个来做文章:Bitmap所占用的内存 = 图片长度 x 图片宽度 x 一个像素点占用的字节数。3个参数,任意减少一个的值,就达到了压缩的效果。
参考文章:&
Android Bitmap 优化(1) - 图片压缩
多图比较谷歌WebP和JPEG图像格式
Android-使用Matrix对Bitmap进行处理
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9412次
排名:千里之外
转载:12篇
(1)(1)(3)(8)(5)热点关注:
强悍瘦身,XY苹果助手照片压缩评测
作者:佚名
iPhone强大的拍摄功能使得果粉们普遍成为了拍照爱好者,使用手机一段时间之后,手机里的照片越来越多,内存却越来越少了。想要删除照片,却又舍不得怎么办?这里小编向大家推荐XY苹果助手2.0强大的照片压缩功能,让您不用删除照片,也能节省手机空间。接下来,小编带大家一起领略史上最强的照片压缩功能吧。打开XY苹果助手,一路点击点击上方的“手机体检”和左边选择“照片压缩”功能,就可以开始扫描了。好在XY苹果助手只需要很短的几分钟甚至几秒钟时间,便可以检测出需要瘦身的照片,更好的是还分别计算出了瘦身前后的照片大小与节省了的空间,一目了然,清楚可见。&原来有这么多照片需要压缩啊,难怪手机内存总是不够。马上选择备份路径,点击“立即压缩”,然后就可以冲杯咖啡,上上网,或者聊聊天了。因为XY苹果助手会自动智能检测占用空间大的照片了,然后利用无失真压缩技术减少照片大小,并自动备份到电脑上。&喝完咖啡,瘦身早就完成了,瘦身之后节省了多少空间,瘦身了多少照片,以及瘦身完成之后,又可以多拍多少照片,全部清楚地在XY苹果助手的页面里列出,本次瘦身成果如何,一目了然。&最后,我们可以在照片备份里打开原图,同时打开手机里压缩好的照片。我们可以清楚地看到压缩完的照片并没有任何失真,画质丝毫不受影响。发微博、发朋友圈、发QQ空间,丝毫不受影响。&不仅非常强大,同时也非常实用。另外,除了压缩照片之外,XY苹果助手2.0还可以帮您体检您的手机并管理大文件,从而节省出更多的内存。同时还为各位果粉们精选出海量正版APP,无需越狱免费下载,这些还需各位果粉们亲自来体验。
& & &最IN最潮的,翔实有趣的,统统都在史上最好用的
&&&&&——官方微信!
& & &扫描左侧二维码或在微信公众号页面上搜索“恺英XY苹果助手”即可
& & &添加XY官方微信,汇聚XY海量资讯教程更有
&&&&&豪华大礼等你来拿
相关教程:
苹果应用商店
推荐您使用“XY苹果助手电脑版”安装“XY苹果助手移动版”将获得更好的体验和更多功能!
1:打开“XY苹果助手电脑版”
2:手机连接到电脑
3:自动安装“XY苹果助手移动版”
扫一扫,安装XY苹果助手移动版如何压缩图片内存大小?
我从网上找到几张好看的图片是GIF格式的,240*320,但是都超过了150K,所以手机用不了,有没有一种很简单的软件压缩图片内存大小,注意,我说的是占用内存的大小,不是单纯的对图片放大缩小,因为我需要的就是240*320的图片!谢谢大家。 如果软件很好用,我额外加分~ 例如下面这个图片,谁能给我压缩成150K以内?
09-08-30 &
要的压缩好了,ulead gif animator5压缩的, 用的是优化, 注意到图片像素变了吧,想压缩就要损失些像素的,正常现象。给分吧^_^
请登录后再发表评论!
把图片格式转化成jpg的,jpg格式压缩比是最高的。如果是向上传图片的话,有一个办法可以,首先用acdsee打开图片,然后缩放,然后qq截图,保存为jpg格式的,这样图片的大小就缩小了,而且图片还是很清楚的。如果不想缩小图片大小的话,基本上是没有办法的了,现在的图像编码技术就只能达到jpg的压缩比。
请登录后再发表评论!教大家如何压缩图片大小-土巴兔装修大学
教大家如何压缩图片大小
报价结果查看方式:
微信人工报价
报价结果将发送到您的手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
教大家如何压缩图片大小
&&&&来源:
微信 手机看本文
更多装修流程、装修风水随时看
随着电子设备的进步和发展,现在的手机摄像头、数码照相机拍出来的照片越来越高清,然后所占的内存也越来越大,占据了我们电脑或云盘上很多空间,有时仅仅只是传输都需要很久,有的甚至还因为太大而上传不上去,这是让大部分人都头疼的问题。那么如何压缩图片大小呢?下面土巴兔小编就来教你几招简单的压缩方法。一:调整图片画质1、用画图工具画图工具是我们每台电脑都有的程序,使用画图工具来压缩图片大小,就无需去安装其他软件,比较快捷。首先我们要先点击桌面上的“开始”菜单,在“程序-附件”中找到“画图”,点击打开画图工具。将要压缩的图片拖拽到画图工具中,然后依次选择画图工具中的“文件-另存为”,选择保存路径后点击确定。随后可以看到另存为后的文件大小被压缩了。2、用美图秀秀首先我们需要下载安装美图秀秀,然后打开程序。用美图秀秀打开要压缩图片,然后点击右上角的保存与分享按钮,在保存页面中找到画质的设置按钮,调节想要的画质百分比,即调整图片大小。设置完毕后点击保存即可。3、用photoshop首先我们需要下载安装photoshop,然后选择打开要压缩的图片。在菜单栏文件选项下找到“存储为”按钮,点击弹出图片保存窗口。找到图片质量选择设置,调节图片质量并确认保存呢,即可压缩图片大小。4、在线编辑图片工具我们可以通过在浏览器上搜索在线PS网站,点击进入后打开要压缩的图片,设置图片质量或图片大小,然后储存图片到本地即可。这种方法适用于短期内少量图片处理,这样我们就不需要去下载图片编辑软件了。但是如果电脑处于脱机离线状态,那么就不适宜用这种方法了。二、调整图片尺寸1、改变设备照相的尺寸或画质手机拍摄或数码照相机的尺寸通常都是很大的,但是我们也可以通过直接在设备设置想象的照片尺寸或画质,来达到图片大小的控制,这样的好处就是方便直接,拍摄完后立刻就可以得到我们想要的尺寸和大小,但是请注意,过小的尺寸可能会影响图片的清晰度,所以要多进行测试。2、用图片编辑工具修改尺寸用美图秀秀或PS打开要压缩的图片之后,选择设置图片尺寸修改图片的长与宽(注意比例要保持一致,否则会导致图片变形),修改完毕之后另存为即可。Word2013中如何使用压缩图片降低图片清晰度来降低文档的大小当在Word中插入很多的图片时,将会使得文件档案变肥大。这种情况,可以使用Word2013提供的压缩图片的功能来压缩图片减少文件的档案大小当在Word中插入很多的图片时,将会使得文件档案变肥大。这种情况,可以使用Word2013提供的压缩图片的功能来压缩图片减少文件的档案大小,与此同时却要付出等同的代价,那就是降低图片的解析度,而且是不可逆,无法还原的。不过为了减少文档容量,避免肥大,使用压缩图片的功能还是很要必要的。现在就来讲解压缩图片的方法。简述首先在Word中插入几张图片,检视档案大小,将档案名称的扩展名更名为ZIP,可以检视每张图存在Word文件中的档案大小,再更改为DOCX后回到Word中,选取图片,点击压缩图片按钮,可对图片进行裁减或删除等等,经过图片压缩处理是不可逆的,所以一定要慎重。步骤以下的例子要来观察&Word&的图片压缩功能,先在&Word&文件中插入8&张我的图片中的预设图片档在档案总管中检视档案大小,本例为:1,035KB。接着,将档案名称的副档名更名为「ZIP」(原为DOCX)。点选这个ZIP档,在其下的「wordmedia」路径中,可以检视每张图存在&Word&文件中的档案大小。(如果你想要取用这些图案,则直接复制到其他位置即可。)再将档案的副档案改图DOCX)回到&Word&中,选取一张图片,按一下[图片工具/调整]中的「压缩图片」。你可以选取「删除图片的裁减区域」,Word&会将你在文件中裁减图片的区域直接删除,而你将无法还原。接着,选取一种目标输出模式,ppi&值愈小,档案也会愈小,反之亦反。存档後,再来看&Word&文件的大小,变为:124KB。(原为1,035KB)更名为ZIP档後,检视文件中每张图片的大小,已经大幅减小。经过图片压缩处理,一但存档後,将是不可逆,所以使用上要非常小心。在这里提醒防止出现失误可以先创建一份复件,防止操作不可逆而带来的不便。以上就是小编给大家介绍的关于如何压缩图片大小以及其他相关知识。
热门活动:
&看过本文的人还看过
来说两句吧:)
来说两句吧:)
房子过户需要多少钱?过户费怎么算?
新房装修步骤 这20个步骤请烂熟于心!
新房验房注意事项 教会你验房!
简约现代风、清爽宜家风、典雅美式复古风总有一种适合你!
推荐城市分站&&
一万套装修案例
中国装修网

我要回帖

更多关于 怎么压缩图片内存 的文章

 

随机推荐