java实现切图并且判断图片是不是纯色/彩色图片
整理文档,搜刮出一个java实现切图并且判断图片是否是纯色/彩色图片的代码,稍微整理精简一下做下分享。
首先上切图的代码
/**
*图片剪裁
*@paramx距离左上角的x轴距离
*@paramy距离左上角的y轴距离
*@paramwidth宽度
*@paramheight高度
*@paramsourcePath图片源
*@paramdescpath目标位置
*/
publicstaticvoidimageCut(intx,inty,intwidth,intheight,StringsourcePath,Stringdescpath){
FileInputStreamis=null;
ImageInputStreamiis=null;
try{
is=newFileInputStream(sourcePath);
StringfileSuffix=sourcePath.substring(sourcePath.lastIndexOf(".")+1);
Iteratorit=ImageIO.getImageReadersByFormatName(fileSuffix);
ImageReaderreader=it.next();
iis=ImageIO.createImageInputStream(is);
reader.setInput(iis,true);
ImageReadParamparam=reader.getDefaultReadParam();
Rectanglerect=newRectangle(x,y,width,height);
param.setSourceRegion(rect);
BufferedImagebi=reader.read(0,param);
ImageIO.write(bi,fileSuffix,newFile(descpath));
}catch(Exceptionex){
ex.printStackTrace();
}finally{
if(is!=null){
try{
is.close();
}catch(IOExceptione){
e.printStackTrace();
}
is=null;
}
if(iis!=null){
try{
iis.close();
}catch(IOExceptione){
e.printStackTrace();
}
iis=null;
}
}
}
以上为切图代码,注意:如果不关闭流的话可能会影响其他代码对图片的操作,尤其是删除等操作
再来一个自己写的判断是否是纯色图片的代码,稍微改一下可以用来判断是不是彩色图片
/**
*判断是否为纯色
*@paramimgPath图片源
*@parampercent纯色百分比,即大于此百分比为同一种颜色则判定为纯色,范围[0-1]
*@return
*@throwsIOException
*/
publicstaticbooleanisSimpleColorImg(StringimgPath,floatpercent)throwsIOException{
BufferedImagesrc=ImageIO.read(newFile(imgPath));
intheight=src.getHeight();
intwidth=src.getWidth();
intcount=0,pixTemp=0,pixel=0;
for(inti=0;i=percent)//如果连续相同的像素点大于设定的百分比的话,就判定为是纯色的图片
returntrue;
pixTemp=pixel;
}
}
returnfalse;
}
以上为本人用来判断纯色的代码,逻辑比较简单,具体还要看需求来决定
如果是判断彩色的话,可以试试如下逻辑:
1、如果有N个像素点各不相同的话可以判定为彩色
2、如果图片上有>=N种像素点的话,判断为彩色图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。