Android图片处理工具类BitmapUtils
Android图片的处理工具类BitmapUtils,供大家参考,具体内容如下
项目中经常会用到图片,所以在这先简单的总结一下。闲言少叙,上代码。
packagecom.lvstudio.myapp.utils;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Matrix;
importandroid.graphics.PixelFormat;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.graphics.drawable.Drawable;
importandroid.util.DisplayMetrics;
importandroid.view.WindowManager;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
/**
*CreatedbyLvStudioon2016/11/7.
*/
publicclassBitmapUtils{
/**
*屏幕分辨率和指定清晰度的图片压缩方法
*
*@paramcontext
*@paramimageBitmap图片
*@return
*/
publicstaticBitmapcomp(Contextcontext,Bitmapimage){
intmaxLength=1024*1024;//预定的图片最大内存,单位byte
//压缩大小
ByteArrayOutputStreambaos=newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
intoptions=100;
while(baos.toByteArray().length>maxLength){//循环判断,大于继续压缩
options-=10;//每次都减少10
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG,options,baos);//PNG压缩options%
}
//压缩尺寸
ByteArrayInputStreambais=newByteArrayInputStream(baos.toByteArray());
BitmapFactory.Optionsopts=newBitmapFactory.Options();//选项对象(在加载图片时使用)
opts.inJustDecodeBounds=true;//修改选项,只获取大小
BitmapFactory.decodeStream(bais,null,opts);//加载图片(只得到图片大小)
//获取屏幕大小,按比例压缩
WindowManagermanager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
intscaleX=opts.outWidth/manager.getDefaultDisplay().getWidth();//X轴缩放比例(图片宽度/屏幕宽度)
intscaleY=opts.outHeight/manager.getDefaultDisplay().getHeight();//Y轴缩放比例
intscale=scaleX>scaleY?scaleX:scaleY;//图片的缩放比例(X和Y哪个大选哪个)
opts.inJustDecodeBounds=false;//修改选项,不只解码边界
opts.inSampleSize=scale>1?scale:1;//修改选项,加载图片时的缩放比例
returnBitmapFactory.decodeStream(bais,null,opts);//加载图片(得到压缩后的图片)
}
/**
*屏幕分辨率和指定清晰度的图片压缩方法
*
*@paramcontext
*@parampath图片的路径
*@return
*/
publicstaticBitmapcomp(Contextcontext,Stringpath){
returncompressImage(getUsableImage(context,path));
}
/**
*获取屏幕分辨率的Bitmap
*
*@paramcontext
*@parampath图片的路径
*@return
*/
publicstaticBitmapgetUsableImage(Contextcontext,Stringpath){
BitmapFactory.Optionsopts=newBitmapFactory.Options();//选项对象(在加载图片时使用)
opts.inJustDecodeBounds=true;//修改选项,只获取大小
BitmapFactory.decodeFile(path,opts);//加载图片(只得到图片大小)
DisplayMetricsmetrics=newDisplayMetrics();
metrics=context.getApplicationContext().getResources().getDisplayMetrics();
intscaleX=opts.outWidth/metrics.widthPixels;//X轴缩放比例(图片宽度/屏幕宽度)
intscaleY=opts.outHeight/metrics.heightPixels;//Y轴缩放比例
intscale=scaleX>scaleY?scaleX:scaleY;//图片的缩放比例(X和Y哪个大选哪个)
opts.inJustDecodeBounds=false;//修改选项,不只解码边界
opts.inSampleSize=scale>1?scale:1;//修改选项,加载图片时的缩放比例
returnBitmapFactory.decodeFile(path,opts);//加载图片(得到缩放后的图片)
}
/**
*压缩图片清晰度,到指定大小
*
*@paramimage
*@return
*/
publicstaticBitmapcompressImage(Bitmapimage){
intmaxLength=1024*1024;//(byte)
ByteArrayOutputStreambaos=newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
intoptions=100;
while(baos.toByteArray().length>maxLength){//循环判断如果压缩后图片是否大于1mb,大于继续压缩
options-=10;//每次都减少10
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中
}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片
returnbitmap;
}
/**
*指定分辨率和清晰度的图片压缩方法
*
*@paramfromFile
*@paramtoFile
*@paramreqWidth
*@paramreqHeight
*@paramquality
*/
publicstaticvoidtransImage(StringfromFile,StringtoFile,intreqWidth,intreqHeight,intquality){
Bitmapbitmap=BitmapFactory.decodeFile(fromFile);
intbitmapWidth=bitmap.getWidth();
intbitmapHeight=bitmap.getHeight();
//缩放的尺寸
floatscaleWidth=(float)reqWidth/bitmapWidth;
floatscaleHeight=(float)reqHeight/bitmapHeight;
Matrixmatrix=newMatrix();
matrix.postScale(scaleWidth,scaleHeight);
//产生缩放后的Bitmap对象
BitmapresizeBitmap=Bitmap.createBitmap(bitmap,0,0,bitmapWidth,bitmapHeight,matrix,false);
//保存到文件
bitmap2File(toFile,quality,resizeBitmap);
if(!bitmap.isRecycled()){
//释放资源,以防止OOM
bitmap.recycle();
}
if(!resizeBitmap.isRecycled()){
resizeBitmap.recycle();
}
}
/**
*Bitmap转换为文件
*
*@paramtoFile
*@paramquality
*@parambitmap
*@return
*/
publicstaticFilebitmap2File(StringtoFile,intquality,Bitmapbitmap){
FilecaptureFile=newFile(toFile);
FileOutputStreamout=null;
try{
out=newFileOutputStream(captureFile);
if(bitmap.compress(Bitmap.CompressFormat.JPEG,quality,out)){
out.flush();
out.close();
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returncaptureFile;
}
/**
*Drawable转换为Bitmap
*
*@paramdrawable
*@return
*/
publicstaticBitmapdrawableToBitamp(Drawabledrawable){
intw=drawable.getIntrinsicWidth();
inth=drawable.getIntrinsicHeight();
Bitmap.Configconfig=drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
:Bitmap.Config.RGB_565;
Bitmapbitmap=Bitmap.createBitmap(w,h,config);
//注意,下面三行代码要用到,否在在View或者surfaceview里的canvas.drawBitmap会看不到图
Canvascanvas=newCanvas(bitmap);
drawable.setBounds(0,0,w,h);
drawable.draw(canvas);
returnbitmap;
}
//Bitmap、Drawable、InputStream、byte[]之间转换
/**********************************************************/
//1.BitmaptoInputStream
publicstaticInputStreambitmap2Input(Bitmapbitmap,intquality){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,quality,baos);
returnnewByteArrayInputStream(baos.toByteArray());
}
publicstaticInputStreambitmap2Input(Bitmapbitmap){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
returnnewByteArrayInputStream(baos.toByteArray());
}
//2.Bitmaptobyte[]
publicstaticbyte[]bitmap2ByteArray(Bitmapbitmap,intquality){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,quality,baos);
returnbaos.toByteArray();
}
publicstaticbyte[]bitmap2ByteArray(Bitmapbitmap){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
returnbaos.toByteArray();
}
//3.Drawabletobyte[]
publicstaticbyte[]drawable2ByteArray(Drawabledrawable){
Bitmapbitmap=((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStreamout=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,out);
returnout.toByteArray();
}
//4.byte[]toBitmap
publicstaticBitmapbyteArray2Bitmap(byte[]bytes){
returnBitmapFactory.decodeByteArray(bytes,0,bytes.length);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。