java实现图片角度旋转并获得图片信息
本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下
publicclassDemo{
/**
*调整图片角度
*makebydongxh2017年11月1日下午3:51:08
*@paramsrc
*@paramangel
*@return
*/
publicstaticBufferedImagerotate(Imagesrc,intangel){
intsrc_width=src.getWidth(null);
intsrc_height=src.getHeight(null);
//calculatethenewimagesize
Rectanglerect_des=CalcRotatedSize(newRectangle(newDimension(
src_width,src_height)),angel);
BufferedImageres=null;
res=newBufferedImage(rect_des.width,rect_des.height,
BufferedImage.TYPE_INT_RGB);
Graphics2Dg2=res.createGraphics();
//transform
g2.translate((rect_des.width-src_width)/2,
(rect_des.height-src_height)/2);
g2.rotate(Math.toRadians(angel),src_width/2,src_height/2);
g2.drawImage(src,null,null);
returnres;
}
/**
*计算旋转参数
*makebydongxh2017年11月1日下午3:51:29
*@paramsrc
*@paramangel
*@return
*/
publicstaticRectangleCalcRotatedSize(Rectanglesrc,intangel){
//ifangelisgreaterthan90degree,weneedtodosomeconversion
if(angel>=90){
if(angel/90%2==1){
inttemp=src.height;
src.height=src.width;
src.width=temp;
}
angel=angel%90;
}
doubler=Math.sqrt(src.height*src.height+src.width*src.width)/2;
doublelen=2*Math.sin(Math.toRadians(angel)/2)*r;
doubleangel_alpha=(Math.PI-Math.toRadians(angel))/2;
doubleangel_dalta_width=Math.atan((double)src.height/src.width);
doubleangel_dalta_height=Math.atan((double)src.width/src.height);
intlen_dalta_width=(int)(len*Math.cos(Math.PI-angel_alpha
-angel_dalta_width));
intlen_dalta_height=(int)(len*Math.cos(Math.PI-angel_alpha
-angel_dalta_height));
intdes_width=src.width+len_dalta_width*2;
intdes_height=src.height+len_dalta_height*2;
returnnewRectangle(newDimension(des_width,des_height));
}
/**
*获得图片调整角度
*makebydongxh2017年11月1日下午3:40:20
*@paramimgFile
*@return
*/
publicstaticIntegergetImgRotateAngle(StringimgFile){
Integerangel=0;
Metadatametadata=null;
try{
if(StringUtils.isBlank(imgFile))returnangel;
File_img_file_=newFile(imgFile);
if(!_img_file_.exists())returnangel;
metadata=JpegMetadataReader.readMetadata(_img_file_);
Directorydirectory=metadata.getDirectory(ExifDirectory.class);
if(directory!=null&&directory.containsTag(ExifDirectory.TAG_ORIENTATION)){
intorientation=directory.getInt(ExifDirectory.TAG_ORIENTATION);
//原图片的方向信息
if(6==orientation){
//6旋转90
angel=90;
}elseif(3==orientation){
//3旋转180
angel=180;
}elseif(8==orientation){
//8旋转90
angel=270;
}
}
}catch(Exceptione){
e.printStackTrace();
}
returnangel;
}
/**
*调整图片角度
*makebydongxh2017年11月1日下午4:31:20
*@paramimgFile
*/
publicstaticvoidrotateImage(StringimgFile){
try{
if(StringUtils.isBlank(imgFile)){
File_img_file_=newFile(imgFile);
if(_img_file_.exists()){
Integerangel=getImgRotateAngle(imgFile);
if(angel==0)return;
BufferedImagesrc=ImageIO.read(_img_file_);
BufferedImagedes=rotate(src,angel);
ImageIO.write(des,"jpg",_img_file_);
}
}
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsException{
StringfromPic="d://88888//IMG_20171004_122718.jpg";
//rotateImage(file);
Integerangel=getImgRotateAngle(fromPic);
System.out.println(angel);
Thumbnails.of(fromPic)
.rotate(angel)
.scale(0.2f)
.outputFormat("jpg")
.outputQuality(0.2f)
.toFile(fromPic);
System.out.println("==End==");
}
}
获得图片使用metadata-extractor
com.drewnoakes metadata-extractor 2.4.0-beta-1
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。