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();
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!