java 根据坐标截取图片实例代码
java根据坐标截取图片
实例代码:代码中有不是注释,很好看懂!
packagecom.json.test; importjava.awt.Rectangle; importjava.awt.image.BufferedImage; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.util.Iterator; importjavax.imageio.ImageIO; importjavax.imageio.ImageReadParam; importjavax.imageio.ImageReader; importjavax.imageio.stream.ImageInputStream; publicclassOperateImage{ //===源图片路径名称如:c:\1.jpg privateStringsrcpath; //===剪切图片存放路径名称.如:c:\2.jpg privateStringsubpath; //===剪切点x坐标 privateintx; privateinty; //===剪切点宽度 privateintwidth; privateintheight; publicOperateImage(){ } publicOperateImage(intx,inty,intwidth,intheight){ this.x=x; this.y=y; this.width=width; this.height=height; } /** *对图片裁剪,并把裁剪完蛋新图片保存。 */ publicvoidcut()throwsIOException{ FileInputStreamis=null; ImageInputStreamiis=null; try{ //读取图片文件 is=newFileInputStream(srcpath); /* *返回包含所有当前已注册ImageReader的Iterator,这些ImageReader *声称能够解码指定格式。参数:formatName-包含非正式格式名称. *(例如"jpeg"或"tiff")等。 */ Iteratorit=ImageIO.getImageReadersByFormatName("jpg"); ImageReaderreader=it.next(); //获取图片流 iis=ImageIO.createImageInputStream(is); /* * iis:读取源.true:只向前搜索
.将它标记为‘只向前搜索'。 *此设置意味着包含在输入源中的图像将只按顺序读取,可能允许reader *避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。 */ reader.setInput(iis,true); /* *描述如何对流进行解码的类
.用于指定如何在输入时从JavaImageI/O *框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 *将从其ImageReader实现的getDefaultReadParam方法中返回 *ImageReadParam的实例。 */ ImageReadParamparam=reader.getDefaultReadParam(); /* *图片裁剪区域。Rectangle指定了坐标空间中的一个区域,通过Rectangle对象 *的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。 */ Rectanglerect=newRectangle(x,y,width,height); //提供一个BufferedImage,将其用作解码像素数据的目标。 param.setSourceRegion(rect); /* *使用所提供的ImageReadParam读取通过索引imageIndex指定的对象,并将 *它作为一个完整的BufferedImage返回。 */ BufferedImagebi=reader.read(0,param); //保存新图片 ImageIO.write(bi,"jpg",newFile(subpath)); }finally{ if(is!=null) is.close(); if(iis!=null) iis.close(); } } publicintgetHeight(){ returnheight; } publicvoidsetHeight(intheight){ this.height=height; } publicStringgetSrcpath(){ returnsrcpath; } publicvoidsetSrcpath(Stringsrcpath){ this.srcpath=srcpath; } publicStringgetSubpath(){ returnsubpath; } publicvoidsetSubpath(Stringsubpath){ this.subpath=subpath; } publicintgetWidth(){ returnwidth; } publicvoidsetWidth(intwidth){ this.width=width; } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; } publicstaticvoidmain(String[]args){ OperateImageoperateImage=newOperateImage(20,20,100,100); operateImage.srcpath="C:/test/1.jpg"; operateImage.subpath="C:/test/2.jpg"; try{ operateImage.cut(); }catch(IOExceptione){ e.printStackTrace(); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!