java实现图片角度旋转并获得图片信息
程序员文章站
2024-02-21 11:16:16
本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下
public class demo {
/**
*...
本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下
public class demo { /** * 调整图片角度 * make by dongxh 2017年11月1日下午3:51:08 * @param src * @param angel * @return */ public static bufferedimage rotate(image src, int angel) { int src_width = src.getwidth(null); int src_height = src.getheight(null); // calculate the new image size rectangle rect_des = calcrotatedsize(new rectangle(new dimension( src_width, src_height)), angel); bufferedimage res = null; res = new bufferedimage(rect_des.width, rect_des.height, bufferedimage.type_int_rgb); graphics2d g2 = 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); return res; } /** * 计算旋转参数 * make by dongxh 2017年11月1日下午3:51:29 * @param src * @param angel * @return */ public static rectangle calcrotatedsize(rectangle src, int angel) { // if angel is greater than 90 degree, we need to do some conversion if (angel >= 90) { if(angel / 90 % 2 == 1){ int temp = src.height; src.height = src.width; src.width = temp; } angel = angel % 90; } double r = math.sqrt(src.height * src.height + src.width * src.width) / 2; double len = 2 * math.sin(math.toradians(angel) / 2) * r; double angel_alpha = (math.pi - math.toradians(angel)) / 2; double angel_dalta_width = math.atan((double) src.height / src.width); double angel_dalta_height = math.atan((double) src.width / src.height); int len_dalta_width = (int) (len * math.cos(math.pi - angel_alpha - angel_dalta_width)); int len_dalta_height = (int) (len * math.cos(math.pi - angel_alpha - angel_dalta_height)); int des_width = src.width + len_dalta_width * 2; int des_height = src.height + len_dalta_height * 2; return new rectangle(new dimension(des_width, des_height)); } /** * 获得图片调整角度 * make by dongxh 2017年11月1日下午3:40:20 * @param imgfile * @return */ public static integer getimgrotateangle(string imgfile){ integer angel = 0; metadata metadata = null; try{ if(stringutils.isblank(imgfile))return angel; file _img_file_ = new file(imgfile); if(!_img_file_.exists())return angel; metadata = jpegmetadatareader.readmetadata(_img_file_); directory directory = metadata.getdirectory(exifdirectory.class); if(directory != null && directory.containstag(exifdirectory.tag_orientation)){ int orientation = directory.getint(exifdirectory.tag_orientation); // 原图片的方向信息 if(6 == orientation ){ //6旋转90 angel = 90; }else if( 3 == orientation){ //3旋转180 angel = 180; }else if( 8 == orientation){ //8旋转90 angel = 270; } } }catch(exception e){ e.printstacktrace(); } return angel; } /** * 调整图片角度 * make by dongxh 2017年11月1日下午4:31:20 * @param imgfile */ public static void rotateimage(string imgfile){ try { if(stringutils.isblank(imgfile)){ file _img_file_ = new file(imgfile); if(_img_file_.exists()){ integer angel = getimgrotateangle(imgfile); if(angel==0)return; bufferedimage src = imageio.read(_img_file_); bufferedimage des = rotate(src, angel); imageio.write(des,"jpg", _img_file_); } } } catch (ioexception e) { e.printstacktrace(); } } public static void main(string[] args)throws exception{ string frompic = "d://88888//img_20171004_122718.jpg"; //rotateimage(file); integer angel = 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
<dependency> <groupid>com.drewnoakes</groupid> <artifactid>metadata-extractor</artifactid> <version>2.4.0-beta-1</version> </dependency>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。