Android学习之压缩图片到指定大小

来源:互联网 发布:网络可爱美女图片 编辑:程序博客网 时间:2024/06/07 17:16

关于图片压缩,是为了上传服务器时有些地方有大小限制,因此,这里我总结了两种方法,个人感觉方法一比较准确一点。

方法一:

 * 图片压缩方法一 *  * 计算 bitmap大小,如果超过64kb,则进行压缩 *  * @param bitmap * @return */private Bitmap ImageCompressL(Bitmap bitmap) {double targetwidth = Math.sqrt(64.00 * 1000);if (bitmap.getWidth() > targetwidth || bitmap.getHeight() > targetwidth) {// 创建操作图片用的matrix对象Matrix matrix = new Matrix();// 计算宽高缩放率double x = Math.max(targetwidth / bitmap.getWidth(), targetwidth/ bitmap.getHeight());// 缩放图片动作matrix.postScale((float) x, (float) x);bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),bitmap.getHeight(), matrix, true);}return bitmap;}

方法二:

 * 图片压缩方法二(不太准确) *  * 计算 bitmap大小,如果超过64kb,则进行压缩 *  * @param bitmap */private Bitmap ImageCompress(Bitmap bitmap) {// 图片允许最大空间 单位:KBdouble maxSize = 64.00;// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)ByteArrayOutputStream baos = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);byte[] b = baos.toByteArray();// 将字节换成KBdouble mid = b.length / 1024;// 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩if (mid > maxSize) {// 获取bitmap大小 是允许最大大小的多少倍double i = mid / maxSize;// 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),bitmap.getHeight() / Math.sqrt(i));}return bitmap;}/*** * 图片压缩方法二 *  * @param bgimage *            :源图片资源 * @param newWidth *            :缩放后宽度 * @param newHeight *            :缩放后高度 * @return */public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {// 获取这个图片的宽和高float width = bgimage.getWidth();float height = bgimage.getHeight();// 创建操作图片用的matrix对象Matrix matrix = new Matrix();// 计算宽高缩放率float scaleWidth = ((float) newWidth) / width;float scaleHeight = ((float) newHeight) / height;// 缩放图片动作matrix.postScale(scaleWidth, scaleHeight);Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,(int) height, matrix, true);return bitmap;}


2 0
原创粉丝点击