private Bitmap
getimage(String srcPath) {
BitmapFactory.Options newOpts =
new BitmapFactory.Options()
;
//开始读入图片,此时把options.inJustDecodeBounds 设回true了
newOpts.
inJustDecodeBounds =
true;
Bitmap bitmap = BitmapFactory.
decodeFile(srcPath
,newOpts)
;//此时返回bm为空
newOpts.
inJustDecodeBounds =
false;
int w = newOpts.
outWidth;
int h = newOpts.
outHeight;
//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
float hh =
200f;//这里设置高度为800f
float ww =
100f;//这里设置宽度为480f
//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be =
1;//be=1表示不缩放
if (w > h && w > ww) {
//如果宽度大的话根据宽度固定大小缩放
be = (
int) (newOpts.
outWidth / ww)
;
}
else if (w < h && h > hh) {
//如果高度高的话根据宽度固定大小缩放
be = (
int) (newOpts.
outHeight / hh)
;
}
if (be <=
0)
be =
1;
System.
out.println(
"缩放比例"+be)
;
newOpts.
inSampleSize = be
;//设置缩放比例
newOpts.
inPreferredConfig = Bitmap.Config.
RGB_565;
//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
bitmap = BitmapFactory.
decodeFile(srcPath
, newOpts)
;
return compressImage(bitmap)
;//压缩好比例大小后再进行质量压缩
}
/**
* 质量压缩
* @param image
* @return
*/
private Bitmap
compressImage(Bitmap image) {
ByteArrayOutputStream baos =
new ByteArrayOutputStream()
;
image.compress(Bitmap.CompressFormat.
JPEG, 100, baos)
;//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options =
90;
System.
out.println(
"图片大小:"+baos.toByteArray().
length)
;
while ( baos.toByteArray().
length /
1024>
100) {
//循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset()
;//重置baos即清空baos
options -=
10;//每次都减少10
image.compress(Bitmap.CompressFormat.
JPEG, options
, baos)
;//这里压缩options%,把压缩后的数据存放到baos中
}
System.
out.println(
"图片压缩比例:"+options+
" 压缩后大小:"+baos.toByteArray().
length)
;
ByteArrayInputStream isBm =
new ByteArrayInputStream(baos.toByteArray())
;//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.
decodeStream(isBm
, null, null)
;//把ByteArrayInputStream数据生成图片
bitmap =
rotaingImageView(
90, bitmap)
;//旋转角度
return bitmap
;
}
/*
* 旋转图片
* @param angle
* @param bitmap
* @return Bitmap
*/
public static Bitmap
rotaingImageView(
int angle
, Bitmap bitmap) {
//旋转图片 动作
Matrix matrix =
new Matrix()
;
matrix.postRotate(angle)
;
System.
out.println(
"angle2=" + angle)
;
// 创建新的图片
Bitmap resizedBitmap = Bitmap.
createBitmap(bitmap
, 0, 0,
bitmap.getWidth()
, bitmap.getHeight()
, matrix
, true)
;
return resizedBitmap
;
}
转载请注明原文地址: https://ju.6miu.com/read-1301301.html