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