相信做Android开发的小伙伴对于Android图片压缩、裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习、工作中可以帮助到大家。
首先我们看一下这个问题出现的原因,当我们需要在我们的应用中添加大量图片是,程序往往会报出OMM问题,这是什么问题呢?是当我们添加的照片过多或过大时,Android就会报出超内存错误,往往我们遇到这个问题都很无奈,进行图片缓存优化可以帮助我们解决这个问题,但是很多时候我们根本不知道,如何进行内存优化,很明显我就是这样的一位,这里我采用了压缩图片、裁剪图片的方式,减少图片占用的内存,从而使图片展示流畅。
下面我们先看一下如何进行图片的裁剪:裁剪图片有两种方式,一种调用系统的裁剪方式,这种方式可以方便用户选择自己的裁剪区域,很多关于图片裁剪的视频,讲的就是这一种;第二种是通过后台函数直接进行裁剪,这种方式的好处在于,简化了用户的操作,方便快捷。对于第一种,大家可以百度一下,本篇我们一起来探讨一下如何通过后台函数实现对图片的自动裁剪。
File file = new File(fileString);//文件对象;fileString:文件的地址InputStream is = null;try { is = new FileInputStream(file);//获得一个文件输入流对象} catch (FileNotFoundException e) { e.printStackTrace();}BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = false;//这个参数一定要设置为false;如果将其设为true的话,在decode时将会返回null,通过此设置可以去查询一个bitmap的属性,比如bitmap的长与宽,而不占用内存大小double n = file.length()/1024.0;//获得文件的大小if(n<200){ options.inSampleSize = 2;//width,hight设为原来的二分一}else{ options.inSampleSize = 3;//width,hight设为原来的三分一} Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
BitmapFactory.decodeStream(is, null, options);根据上面我们设置压缩比,对图片进行压缩处理。
下面我们一起来谈谈如何进行图片的裁剪,这里我介绍的是自定义裁剪,通过我们设置裁剪起点和裁剪长宽值实现对图片的裁剪。这里我将以实现一个根据图片的长宽,取最短边为边居中裁剪。
int w = options.outWidth;//得到图片的宽int h = options.outHeight;//得到图片的高int wh = w > h ? h : w;// 裁切后所取的正方形区域边长int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标int retY = w > h ? 0 : (h - w) / 2;//基于原图,取正方形左上角y坐标 Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);
好了关于图片的压缩与裁剪就为大家介绍完了,希望对大家有一些帮助吧。