本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下
公开课演示{/* * *调整图片角度 *由dongxh 2017年11月1日下午3:51:08 * @param src * @param天使 * @return */公共静态BufferedImage旋转(图像src, int天使){ int src_width=src.getWidth(空); int src_height=src.getHeight(空);//计算新的图像大小 矩形rect_des=CalcRotatedSize(新矩形(新维度( src_width src_height)),天使); BufferedImage res=零; res=new BufferedImage (rect_des。宽度、rect_des.height BufferedImage.TYPE_INT_RGB); Graphics2D g2=res.createGraphics ();//转换 g2.translate (rect_des。宽度- src_width)/2, (rect_des。高度- src_height)/2); g2.rotate (Math.toRadians(天使),src_width/2, src_height/2); g2。drawImage (src,空,空); 返回res; }/* * *计算旋转参数 *由dongxh 2017年11月1日下午3:51:29 * @param src * @param天使 * @return */公共静态矩形CalcRotatedSize(矩形src, int天使){//如果天使大于90度,我们需要做一些转换 如果(天使祝辞=90){ 如果(天使/90% 2==1){ int temp=src.height; src。身高=src.width; src。宽度=temp; } 天使天使%=90; } 双r=Math.sqrt (src。高度* src。身高+ src。宽度* src.width)/2; 双len=2 * sin (Math.toRadians(天使)/2)* r; 双angel_alpha=(数学。π- Math.toRadians(天使))/2; 双angel_dalta_width=Math.atan (src(双)。高度/src.width); 双angel_dalta_height=Math.atan (src(双)。宽/src.height); int len_dalta_width=(int) (len * Math.cos(数学。π- angel_alpha - angel_dalta_width)); int len_dalta_height=(int) (len * Math.cos(数学。π- angel_alpha - angel_dalta_height)); int des_width=src。宽度+ len_dalta_width * 2; int des_height=src。身高+ len_dalta_height * 2; 返回新矩形(新维度(des_width des_height)); }/* * *获得图片调整角度 *由dongxh 2017年11月1日下午3:40:20 * @param imgFile * @return */公共静态整数getImgRotateAngle(字符串imgFile) { 整数天使=0; 元数据的元数据=https://www.yisu.com/zixun/null; 尝试{ 如果(StringUtils.isBlank (imgFile))返回的天使; 文件_img_file_=新文件(imgFile); 如果(! _img_file_.exists()返回的天使; 元数据=JpegMetadataReader.readMetadata (_img_file_); 目录目录=metadata.getDirectory (ExifDirectory.class); 如果(目录!=null & & directory.containsTag (ExifDirectory.TAG_ORIENTATION)) { int取向=directory.getInt (ExifDirectory.TAG_ORIENTATION);//原图片的方向信息 如果(6==取向){//6旋转90 天使=90; }else if(3==取向){//3旋转180 天使=180; }else if(8==取向){//8旋转90 天使=270; } } }捕捉(异常e) { e.printStackTrace (); } 返回的天使; }/* * *调整图片角度 *由dongxh 2017年11月1日下午4:31:20 * @param imgFile */公共静态孔隙rotateImage(字符串imgFile) { 尝试{ 如果(StringUtils.isBlank (imgFile)) { 文件_img_file_=新文件(imgFile); 如果(_img_file_.exists ()) { 整数天使=getImgRotateAngle (imgFile); 如果(天使==0)返回; BufferedImage src=ImageIO.read (_img_file_); BufferedImage des=旋转(src,天使); ImageIO。写(des, jpg, _img_file_); } } }捕捉(IOException e) { e.printStackTrace (); } } 公共静态void main (String [] args){抛出异常 字符串fromPic=" d://88888//IMG_20171004_122718.jpg”;//rotateImage(文件); 整数天使=getImgRotateAngle (fromPic); System.out.println(天使); Thumbnails.of (fromPic) .rotate(天使) .scale(0.2度) .outputFormat (“jpg”) .outputQuality(0.2度) .toFile (fromPic); System.out.println (“====?; } }
获得图片使用metadata-extractor
& lt; dependency> & lt; groupId> com.drewnoakes & lt; artifactId> metadata-extractor & lt; version> 2.4.0-beta-1 & lt;/dependency>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。