java实现图片缩放、旋转和马赛克化
本文是作者结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化。
不多说,上代码:
packagedeal;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.geom.AffineTransform;
importjava.awt.image.AffineTransformOp;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjavax.imageio.ImageIO;
/**
*图像处理类.
*
*@authornagsh
*
*/
publicclassImageDeal{
StringopenUrl;//原始图片打开路径
StringsaveUrl;//新图保存路径
StringsaveName;//新图名称
Stringsuffix;//新图类型只支持gif,jpg,png
publicImageDeal(StringopenUrl,StringsaveUrl,StringsaveName,
Stringsuffix){
this.openUrl=openUrl;
this.saveName=saveName;
this.saveUrl=saveUrl;
this.suffix=suffix;
}
/**
*图片缩放.
*
*@paramwidth
*需要的宽度
*@paramheight
*需要的高度
*@throwsException
*/
publicvoidzoom(intwidth,intheight)throwsException{
doublesx=0.0;
doublesy=0.0;
Filefile=newFile(openUrl);
if(!file.isFile()){
thrownewException("ImageDeal>>>"+file+"不是一个图片文件!");
}
BufferedImagebi=ImageIO.read(file);//读取该图片
//计算x轴y轴缩放比例--如需等比例缩放,在调用之前确保参数width和height是等比例变化的
sx=(double)width/bi.getWidth();
sy=(double)height/bi.getHeight();
AffineTransformOpop=newAffineTransformOp(
AffineTransform.getScaleInstance(sx,sy),null);
Filesf=newFile(saveUrl,saveName+"."+suffix);
ImagezoomImage=op.filter(bi,null);
try{
ImageIO.write((BufferedImage)zoomImage,suffix,sf);//保存图片
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*旋转
*
*@paramdegree
*旋转角度
*@throwsException
*/
publicvoidspin(intdegree)throwsException{
intswidth=0;//旋转后的宽度
intsheight=0;//旋转后的高度
intx;//原点横坐标
inty;//原点纵坐标
Filefile=newFile(openUrl);
if(!file.isFile()){
thrownewException("ImageDeal>>>"+file+"不是一个图片文件!");
}
BufferedImagebi=ImageIO.read(file);//读取该图片
//处理角度--确定旋转弧度
degree=degree%360;
if(degree<0)
degree=360+degree;//将角度转换到0-360度之间
doubletheta=Math.toRadians(degree);//将角度转为弧度
//确定旋转后的宽和高
if(degree==180||degree==0||degree==360){
swidth=bi.getWidth();
sheight=bi.getHeight();
}elseif(degree==90||degree==270){
sheight=bi.getWidth();
swidth=bi.getHeight();
}else{
swidth=(int)(Math.sqrt(bi.getWidth()*bi.getWidth()
+bi.getHeight()*bi.getHeight()));
sheight=(int)(Math.sqrt(bi.getWidth()*bi.getWidth()
+bi.getHeight()*bi.getHeight()));
}
x=(swidth/2)-(bi.getWidth()/2);//确定原点坐标
y=(sheight/2)-(bi.getHeight()/2);
BufferedImagespinImage=newBufferedImage(swidth,sheight,
bi.getType());
//设置图片背景颜色
Graphics2Dgs=(Graphics2D)spinImage.getGraphics();
gs.setColor(Color.white);
gs.fillRect(0,0,swidth,sheight);//以给定颜色绘制旋转后图片的背景
AffineTransformat=newAffineTransform();
at.rotate(theta,swidth/2,sheight/2);//旋转图象
at.translate(x,y);
AffineTransformOpop=newAffineTransformOp(at,
AffineTransformOp.TYPE_BICUBIC);
spinImage=op.filter(bi,spinImage);
Filesf=newFile(saveUrl,saveName+"."+suffix);
ImageIO.write(spinImage,suffix,sf);//保存图片
}
/**
*马赛克化.
*@paramsize马赛克尺寸,即每个矩形的长宽
*@return
*@throwsException
*/
publicbooleanmosaic(intsize)throwsException{
Filefile=newFile(openUrl);
if(!file.isFile()){
thrownewException("ImageDeal>>>"+file+"不是一个图片文件!");
}
BufferedImagebi=ImageIO.read(file);//读取该图片
BufferedImagespinImage=newBufferedImage(bi.getWidth(),
bi.getHeight(),bi.TYPE_INT_RGB);
if(bi.getWidth()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
 