非常实用的Android图片工具类
本文实例为大家分享了Android图片工具类的具体代码,供大家参考,具体内容如下
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.CompressFormat;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.ColorMatrix;
importandroid.graphics.ColorMatrixColorFilter;
importandroid.graphics.LinearGradient;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
importandroid.graphics.Shader;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.graphics.drawable.Drawable;
/**
*图片工具类
*@authorwwj
*2013/7/3
*/
publicclassImageUtil{
/**图片的八个位置**/
publicstaticfinalintTOP=0;//上
publicstaticfinalintBOTTOM=1;//下
publicstaticfinalintLEFT=2;//左
publicstaticfinalintRIGHT=3;//右
publicstaticfinalintLEFT_TOP=4;//左上
publicstaticfinalintLEFT_BOTTOM=5;//左下
publicstaticfinalintRIGHT_TOP=6;//右上
publicstaticfinalintRIGHT_BOTTOM=7;//右下
/**
*图像的放大缩小方法
*@paramsrc源位图对象
*@paramscaleX宽度比例系数
*@paramscaleY高度比例系数
*@return返回位图对象
*/
publicstaticBitmapzoomBitmap(Bitmapsrc,floatscaleX,floatscaleY){
Matrixmatrix=newMatrix();
matrix.setScale(scaleX,scaleY);
Bitmapt_bitmap=Bitmap.createBitmap(src,0,0,src.getWidth(),src.getHeight(),matrix,true);
returnt_bitmap;
}
/**
*图像放大缩小--根据宽度和高度
*@paramsrc
*@paramwidth
*@paramheight
*@return
*/
publicstaticBitmapzoomBimtap(Bitmapsrc,intwidth,intheight){
returnBitmap.createScaledBitmap(src,width,height,true);
}
/**
*将Drawable转为Bitmap对象
*@paramdrawable
*@return
*/
publicstaticBitmapdrawableToBitmap(Drawabledrawable){
return((BitmapDrawable)drawable).getBitmap();
}
/**
*将Bitmap转换为Drawable对象
*@parambitmap
*@return
*/
publicstaticDrawablebitmapToDrawable(Bitmapbitmap){
Drawabledrawable=newBitmapDrawable(bitmap);
returndrawable;
}
/**
*Bitmap转byte[]
*@parambitmap
*@return
*/
publicstaticbyte[]bitmapToByte(Bitmapbitmap){
ByteArrayOutputStreamout=newByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,out);
returnout.toByteArray();
}
/**
*byte[]转Bitmap
*@paramdata
*@return
*/
publicstaticBitmapbyteToBitmap(byte[]data){
if(data.length!=0){
returnBitmapFactory.decodeByteArray(data,0,data.length);
}
returnnull;
}
/**
*绘制带圆角的图像
*@paramsrc
*@paramradius
*@return
*/
publicstaticBitmapcreateRoundedCornerBitmap(Bitmapsrc,intradius){
finalintw=src.getWidth();
finalinth=src.getHeight();
//高清量32位图
Bitmapbitmap=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Paintpaint=newPaint();
Canvascanvas=newCanvas(bitmap);
canvas.drawARGB(0,0,0,0);
paint.setColor(0xff424242);
//防止边缘的锯齿
paint.setFilterBitmap(true);
Rectrect=newRect(0,0,w,h);
RectFrectf=newRectF(rect);
//绘制带圆角的矩形
canvas.drawRoundRect(rectf,radius,radius,paint);
//取两层绘制交集,显示上层
paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//绘制图像
canvas.drawBitmap(src,rect,rect,paint);
returnbitmap;
}
/**
*创建选中带提示图片
*@paramcontext
*@paramsrcId
*@paramtipId
*@return
*/
publicstaticDrawablecreateSelectedTip(Contextcontext,intsrcId,inttipId){
Bitmapsrc=BitmapFactory.decodeResource(context.getResources(),srcId);
Bitmaptip=BitmapFactory.decodeResource(context.getResources(),tipId);
finalintw=src.getWidth();
finalinth=src.getHeight();
Bitmapbitmap=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Paintpaint=newPaint();
Canvascanvas=newCanvas(bitmap);
//绘制原图
canvas.drawBitmap(src,0,0,paint);
//绘制提示图片
canvas.drawBitmap(tip,(w-tip.getWidth()),0,paint);
returnbitmapToDrawable(bitmap);
}
/**
*带倒影的图像
*@paramsrc
*@return
*/
publicstaticBitmapcreateReflectionBitmap(Bitmapsrc){
//两个图像间的空隙
finalintspacing=4;
finalintw=src.getWidth();
finalinth=src.getHeight();
//绘制高质量32位图
Bitmapbitmap=Bitmap.createBitmap(w,h+h/2+spacing,Config.ARGB_8888);
//创建燕X轴的倒影图像
Matrixm=newMatrix();
m.setScale(1,-1);
Bitmapt_bitmap=Bitmap.createBitmap(src,0,h/2,w,h/2,m,true);
Canvascanvas=newCanvas(bitmap);
Paintpaint=newPaint();
//绘制原图像
canvas.drawBitmap(src,0,0,paint);
//绘制倒影图像
canvas.drawBitmap(t_bitmap,0,h+spacing,paint);
//线性渲染-沿Y轴高到低渲染
Shadershader=newLinearGradient(0,h+spacing,0,h+spacing+h/2,0x70ffffff,0x00ffffff,Shader.TileMode.MIRROR);
paint.setShader(shader);
//取两层绘制交集,显示下层。
paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
//绘制渲染倒影的矩形
canvas.drawRect(0,h+spacing,w,h+h/2+spacing,paint);
returnbitmap;
}
/**
*独立的倒影图像
*@paramsrc
*@return
*/
publicstaticBitmapcreateReflectionBitmapForSingle(Bitmapsrc){
finalintw=src.getWidth();
finalinth=src.getHeight();
//绘制高质量32位图
Bitmapbitmap=Bitmap.createBitmap(w,h/2,Config.ARGB_8888);
//创建沿X轴的倒影图像
Matrixm=newMatrix();
m.setScale(1,-1);
Bitmapt_bitmap=Bitmap.createBitmap(src,0,h/2,w,h/2,m,true);
Canvascanvas=newCanvas(bitmap);
Paintpaint=newPaint();
//绘制倒影图像
canvas.drawBitmap(t_bitmap,0,0,paint);
//线性渲染-沿Y轴高到低渲染
Shadershader=newLinearGradient(0,0,0,h/2,0x70ffffff,
0x00ffffff,Shader.TileMode.MIRROR);
paint.setShader(shader);
//取两层绘制交集。显示下层。
paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
//绘制渲染倒影的矩形
canvas.drawRect(0,0,w,h/2,paint);
returnbitmap;
}
publicstaticBitmapcreateGreyBitmap(Bitmapsrc){
finalintw=src.getWidth();
finalinth=src.getHeight();
Bitmapbitmap=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Canvascanvas=newCanvas(bitmap);
Paintpaint=newPaint();
//颜色变换的矩阵
ColorMatrixmatrix=newColorMatrix();
//saturation饱和度值,最小可设为0,此时对应的是灰度图;为1表示饱和度不变,设置大于1,就显示过饱和
matrix.setSaturation(0);
ColorMatrixColorFilterfilter=newColorMatrixColorFilter(matrix);
paint.setColorFilter(filter);
canvas.drawBitmap(src,0,0,paint);
returnbitmap;
}
/**
*保存图片
*@paramsrc
*@paramfilepath
*@paramformat:[Bitmap.CompressFormat.PNG,Bitmap.CompressFormat.JPEG]
*@return
*/
publicstaticbooleansaveImage(Bitmapsrc,Stringfilepath,CompressFormatformat){
booleanrs=false;
Filefile=newFile(filepath);
try{
FileOutputStreamout=newFileOutputStream(file);
if(src.compress(format,100,out)){
out.flush();//写入流
}
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnrs;
}
/**
*添加水印效果
*@paramsrc源位图
*@paramwatermark水印
*@paramdirection方向
*@paramspacing间距
*@return
*/
publicstaticBitmapcreateWatermark(Bitmapsrc,Bitmapwatermark,intdirection,intspacing){
finalintw=src.getWidth();
finalinth=src.getHeight();
Bitmapbitmap=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Canvascanvas=newCanvas(bitmap);
canvas.drawBitmap(src,0,0,null);
if(direction==LEFT_TOP){
canvas.drawBitmap(watermark,spacing,spacing,null);
}elseif(direction==LEFT_BOTTOM){
canvas.drawBitmap(watermark,spacing,h-watermark.getHeight()-spacing,null);
}elseif(direction==RIGHT_TOP){
canvas.drawBitmap(watermark,w-watermark.getWidth()-spacing,spacing,null);
}elseif(direction==RIGHT_BOTTOM){
canvas.drawBitmap(watermark,w-watermark.getWidth()-spacing,h-watermark.getHeight()-spacing,null);
}
returnbitmap;
}
/**
*合成图像
*@paramdirection
*@parambitmaps
*@return
*/
publicstaticBitmapcomposeBitmap(intdirection,Bitmap...bitmaps){
if(bitmaps.length<2){
returnnull;
}
BitmapfirstBitmap=bitmaps[0];
for(inti=0;ifw?sw:fw,fh+sh,Config.ARGB_8888);
canvas=newCanvas(bitmap);
canvas.drawBitmap(secondBitmap,0,0,null);
canvas.drawBitmap(firstBitmap,0,sh,null);
}elseif(direction==BOTTOM){
bitmap=Bitmap.createBitmap(fw>sw?fw:sw,fh+sh,Config.ARGB_8888);
canvas=newCanvas(bitmap);
canvas.drawBitmap(firstBitmap,0,0,null);
canvas.drawBitmap(secondBitmap,0,fh,null);
}elseif(direction==LEFT){
bitmap=Bitmap.createBitmap(fw+sw,sh>fh?sh:fh,Config.ARGB_8888);
canvas=newCanvas(bitmap);
canvas.drawBitmap(secondBitmap,0,0,null);
canvas.drawBitmap(firstBitmap,sw,0,null);
}elseif(direction==RIGHT){
bitmap=Bitmap.createBitmap(fw+sw,fh>sh?fh:sh,
Config.ARGB_8888);
canvas=newCanvas(bitmap);
canvas.drawBitmap(firstBitmap,0,0,null);
canvas.drawBitmap(secondBitmap,fw,0,null);
}
returnbitmap;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。