关于图片压缩,是为了上传服务器时有些地方有大小限制,因此,这里我总结了两种方法,个人感觉方法一比较准确一点。
方法一:
* 图片压缩方法一
*
* 计算 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) {
// 图片允许最大空间 单位:KB
double maxSize = 64.00;
// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
// 将字节换成KB
double 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;
}