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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。